【发布时间】:2020-04-27 06:26:07
【问题描述】:
我想用 DataFrame 中的虚拟数据平滑一个简单的折线图。我知道 interpolate 但所有教程都使用更简单的 numpy 数组;我希望由列生成的每条线都是平滑的。如果有人有经验或知道如何做到这一点,将不胜感激。
作为参考,这里有一些代码和结果图。
# amps
df=pd.read_csv("~/data/poli.csv")
#################################
# wp
wave = (df.right + df.left)**2
df['concord'] = wave
print(df)
哪个输出:
issue right left concord
0 end div 1 1 4
1 for trump 1 -1 0
2 aisle cross 1 1 4
3 for blm -1 1 0
4 help world 1 1 4
5 service 1 1 4
6 community 1 1 4
然后我绘制列,将 x 轴设置为“问题”,将 y 标签设置为“分数”
plot = df.plot(x='issue',
linewidth=9,
alpha=0.36)
plot.set_ylabel('score')
plot.set_xlabel('issues')
plot.legend(bbox_to_anchor=(1, 1), loc='upper left', ncol=1)
concord=df['concord'].values
left=df['left'].values
right=df['right'].values
plt.show()
并生成结果图。
【问题讨论】:
-
平滑每条曲线本质上需要在中间 x 值处生成额外的数据点。这些点将不对应于您当前拥有的任何一个类别。因此,您必须首先平滑每一列(样条应该做?),将它们绘制在线性增加的 x 轴上(例如,0 到 30,取决于平滑产生的点数),最后手动调整刻度,以便每个极值对应于第一列中的一个条目。
标签: python pandas dataframe matplotlib