使用matplotlib在曲线拟合上绘制过多直线的问题

2024-10-03 02:34:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道我做错了什么,但当我尝试实现polyfit来分散数据(年份,评级)时,它会一直绘制一大堆线而不是一条线。看起来像这样:

enter image description here

我的代码如下:

data = movies[['year', 'rtAllCriticsRating']]
data.year = data.year.astype(float).fillna(0.0)
data = data.convert_objects(convert_numeric=True)
data = data[data.rtAllCriticsRating > 0]
#print data
>>> 1995   5.4
    1950   2.3
    ....

#############issues start HERE########################
fig = plt.figure(figsize=(15, 15), dpi=100)
fig.add_subplot(212, axisbg='lightgrey')

# fit with np.polyfit
p = np.polyfit(data.year, data.rtAllCriticsRating, 3)
print p
plt.plot(data.year, data.rtAllCriticsRating, 'bo')
plt.plot(data.year,np.polyval(p, data.year),'r-') # A red solid line
plt.xlim(1900, 2020)
plt.ylim(0, 11)
plt.grid()
plt.xlabel('X Axis is by year')
plt.ylabel('Y Axis is by AllCriticRating')

怎么回事,我怎么解决这个问题?我的主要目标是在这个散点图上覆盖一个红色的线图,显示平均电影评级(一年中所有电影的rtAllCriticsRating的平均值)是如何随时间变化的。。。。在


Tags: 数据convertdataby电影plotisnp
1条回答
网友
1楼 · 发布于 2024-10-03 02:34:56

您的data.year数组似乎没有任何特定的顺序。当你把它放在一个散点图中,这并不重要。但是,当您使用该数组覆盖一条平均线时,您需要它按数字(在本例中是按时间顺序)排列的。尝试以下操作:

plt.plot(np.sort(data.year), np.polyval(p, np.sort(data.year), 'r-')

这应该以适当的顺序连接所有的线,形成一条单独的曲线。

相关问题 更多 >