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,多行的绘图选项的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas中数据类型转换方法的差异

Python Pandas 绘图警告

20180428学习python笔记(pandas使用----绘图)

动态创建带有闪亮绘图的选项卡,而无需重新创建现有选项卡

python数据分析-09pandas绘图

当有两个索引、pandas、python 时针对日期时间进行绘图