使用matplotlib在曲线上绘制太多线条的问题

时间:2014-03-12 04:11:56

标签: python matplotlib pandas ipython curve-fitting

不确定我做错了什么,但是当我尝试将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的平均值)随时间的变化情况....

1 个答案:

答案 0 :(得分:1)

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

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

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