matplotlib 如何绘制实际值与预测值的图表,

xe55xuns  于 2023-10-24  发布在  其他
关注(0)|答案(4)|浏览(118)
Original      Predicted
0           6            1.56
1           12.2         3.07
2           0.8          2.78
3           5.2          3.54
.

我试过的代码:

def plotGraph(y_test,y_pred,regressorName):
    if max(y_test) >= max(y_pred):
        my_range = int(max(y_test))
    else:
        my_range = int(max(y_pred))
    plt.scatter(y_test, y_pred, color='red')
    plt.plot(range(my_range), range(my_range), 'o')
    plt.title(regressorName)
    plt.show()
    return

我想要的图形:

但我目前的输出:

ugmeyewa

ugmeyewa1#

您遇到的问题似乎是您将y_testy_pred混合到一个“plot”中(这里的意思是scatter()函数)
使用scatter()plot()函数(您也混淆了),第一个参数是x轴上的坐标,第二个参数是y轴上的坐标。
所以1.)你需要一个scatter()只有y_test,然后一个只有y_pred。要做到这一点,你2.)需要有2D数据,或者在你的情况下,只是使用range()功能为x轴使用索引。
下面是一些随机数据的代码,可以让你开始:

import matplotlib.pyplot as plt
import numpy as np

def plotGraph(y_test,y_pred,regressorName):
    if max(y_test) >= max(y_pred):
        my_range = int(max(y_test))
    else:
        my_range = int(max(y_pred))
    plt.scatter(range(len(y_test)), y_test, color='blue')
    plt.scatter(range(len(y_pred)), y_pred, color='red')
    plt.title(regressorName)
    plt.show()
    return

y_test = range(10)
y_pred = np.random.randint(0, 10, 10)

plotGraph(y_test, y_pred, "test")

这将给予如下内容:

iqih9akk

iqih9akk2#

您正在绘制x轴上的y_test和y轴上的y_pred。您希望在x轴上有一个公共数据点,而y_testy_pred都在Y轴上。下面的代码片段将帮助您实现这一点。(其中true_value和predicted_value是要绘制的列表,common是用作公共x轴的列表。)

fig = plt.figure()
    a1 = fig.add_axes([0,0,1,1])
    x = common
    a1.plot(x,true_value, 'ro')
    a1.set_ylabel('Actual')
    a2 = a1.twinx()
    a2.plot(x, predicted_value,'o')
    a2.set_ylabel('Predicted')
    fig.legend(labels = ('Actual','Predicted'),loc='upper left')
    plt.show()
2w2cym1i

2w2cym1i3#

我不能模拟你的代码,但我已经看到了一些点在第一眼。首先,在你想要的图形中的数据点是规范化的。你需要除以col中的所有数据点的最大值,这列。
您还应该检查文档中的图例功能,以添加像您想要的图形那样的图例。

xjreopfe

xjreopfe4#

在matplotlib中(从代码中我假设你正在使用它)documentation有一个matplotlib.pyplot.scatter函数的信息,前两个参数是:

x,y:float或array-like,shape(n,)

数据位置。
因此,对于您的应用程序,您需要在同一个图形上绘制两个散点图-使用matplotlib.pyplot.scatter两次。首先将y_test作为ycolor='red',然后将y_pred作为ycolor='blue'
不幸的是,您没有提供y_test和y_pred的x值,但是您还需要这些信息来在plt.scatter函数调用中定义x
绘制两个散点图有点棘手,正如this answer所说,它需要引用Axes对象。例如(如答案所示):

import matplotlib.pyplot as plt

x = range(100)
y = range(100,200)
fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.scatter(x[:4], y[:4], s=10, c='b', marker="s", label='first')
ax1.scatter(x[40:],y[40:], s=10, c='r', marker="o", label='second')

查看matplotlib文档和上面提到的答案以了解更多细节。

相关问题