Python pandas,多行的绘图选项
Posted
技术标签:
【中文标题】Python pandas,多行的绘图选项【英文标题】:Python pandas, Plotting options for multiple lines 【发布时间】:2012-12-20 03:13:17 【问题描述】:我想从 pandas 数据框中绘制多条线,并为每条线设置不同的选项。我想做类似的事情
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1])
这会引发一些错误消息:
线宽不能用列表调用
在样式中,在列表中定义颜色时,我不能使用“s”和“o”或任何其他字母符号
还有一些我觉得很奇怪的东西
当我在上述代码testdataframe[0].plot()
中添加另一个绘图命令时,它将在同一绘图中绘制这条线,如果我添加命令testdataframe[[0,1]].plot()
,它将创建一个新绘图
如果我打电话给testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y'])
,可以使用样式列表,但不能使用颜色列表
希望有人能帮忙,谢谢。
【问题讨论】:
【参考方案1】:你离得太近了!
您可以在样式列表中指定颜色:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
styles = ['bs-','ro-','y^-']
linewidths = [2, 1, 4]
fig, ax = plt.subplots()
for col, style, lw in zip(testdataframe.columns, styles, linewidths):
testdataframe[col].plot(style=style, lw=lw, ax=ax)
还要注意plot
方法可以接受matplotlib.axes
对象,因此您可以像这样进行多次调用(如果您愿意的话):
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F'])
styles1 = ['bs-','ro-','y^-']
styles2 = ['rs-','go-','b^-']
fig, ax = plt.subplots()
testdataframe1.plot(style=styles1, ax=ax)
testdataframe2.plot(style=styles2, ax=ax)
在这种情况下不太实用,但这个概念以后可能会派上用场。
【讨论】:
感谢您的帮助,但这对线宽没有帮助?我也想使用一些自定义颜色,例如 own_color='#FF0000' 然后它不能这样调用。 那么我只能考虑遍历列。查看我对第一个示例的修改。 是的,这就是我现在正在使用的。但我只是想知道他们是否只是这种直接任务的笨拙方式。但是非常感谢您的帮助! 这是一个很好的答案,但对于@Joerg 的观点,是否只有几行代码就可以做到这一点?这是一项看似简单的任务。 @zthomas.nc 如果你经常做这样的事情,你可能想使用 seaborn【参考方案2】:考虑到数据框testdataframe
testdataframe = pd.DataFrame(np.arange(12).reshape(4,3))
print(testdataframe)
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
您可以将styles
组合成一个字符串列表,如下面的styles
定义。我还将在lws
中定义线宽
styles=['bs-', 'ro-', 'y^-']
lws = [2, 1, 1]
我们可以在testdataframe
上使用plot
方法,将列表styles
传递给style
参数。请注意,我们也可以传递字典(可能还有其他东西)。
但是,线宽不是那么容易处理的。我首先捕获AxesSubplot
对象并遍历设置线宽的lines 属性。
ax = testdataframe.plot(style=styles)
for i, l in enumerate(ax.lines):
plt.setp(l, linewidth=lws[i])
【讨论】:
【参考方案3】:所以我认为答案在于在同一个参数中传递颜色和样式。以下示例适用于 pandas 0.19.2:
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0)
不幸的是,似乎不可能将多个线宽作为输入传递给 matplotlib。
【讨论】:
这就是为什么你总是一直向下滚动。以上是关于Python pandas,多行的绘图选项的主要内容,如果未能解决你的问题,请参考以下文章