pro*_*der 1 python matplotlib pandas
这是我的代码,它可以正常工作:
df = pd.DataFrame({
'foo' : [1, 2, 7, 2],
'bar' : [3, 1, 3, 2],
'spam' : [5, 2, 1, 0]
})
x = range(len(df.foo))
fig, ax = plt.subplots()
ax.stackplot(x, df.foo, df.bar, df.spam)
# plt.savefig('stackedarea.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何传递一个列表,所以我不必明确键入每一列(Df.foo,df.bar ...)?
我仍然是lambda函数和列表推导的初学者,我怀疑其中一个是必需的.
(1)我的第一个想法,是传递一个列名列表
columnlist = ['foo', 'bar']
# snip
ax.stackplot(x, #something_goes_here) #I tried df[columnlist[, no joy
Run Code Online (Sandbox Code Playgroud)
(2)我的第二个想法,传递一列列:
columnlist = ['foo', 'bar']
#here is where I don't know how to transform column list so it becomes
# passedlist, where passedlist = [df.foo, df.bar]
# snip
ax.stackplot(x, df[columnlist])
Run Code Online (Sandbox Code Playgroud)
希望我已经解释得很好了.我只做了几个星期的蟒蛇,请不要大声嘲笑!
如果你想绘制你可以做的所有列:
ax.stackplot(x, *[ts for col, ts in df.iteritems()])
Run Code Online (Sandbox Code Playgroud)
如果只是一个子集:
ax.stackplot(x, *[df[col] for col in ['foo', 'bar']])
Run Code Online (Sandbox Code Playgroud)
注意*上面的行.
编辑:你也可以传递一个二维数组stackplot,所以更简单的表示法是:
ax.stackplot(x, df.T) # all columns
ax.stackplot(x, df[['foo','bar']].T) # only foo & bar columns
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |