在matplotlib中绘制过多线条的问题
我不太确定自己哪里出错了,但当我尝试把多项式拟合应用到散点图数据(年份,评分)时,它总是画出很多条线,而不是一条单独的线。结果看起来像这样:
我的代码如下:
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 个回答
1
看起来你的 data.year
数组没有按照特定的顺序排列。当你把它放进散点图里,这个顺序其实没什么关系。不过,当你想用这个数组来画一条平均线的时候,就需要它按数字顺序(在这个情况下是时间顺序)排列。你可以试试下面的做法:
plt.plot(np.sort(data.year), np.polyval(p, np.sort(data.year), 'r-')
这样应该能把所有的线连接起来,形成一条完整的曲线。