Python pandas, Plotting options for multiple lines
我想从pandas数据框中绘制多条线,并为每条线设置不同的选项。 我想做点什么
1 2 | testdataframe=pd.DataFrame(np.arange(12).reshape(4,3)) testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1]) |
这会引发一些错误消息:
-
linewidth不能用列表调用
-
在样式中,当在列表中定义颜色时,我不能使用's'和'o'或任何其他字母符号
还有一些东西对我来说似乎很奇怪
-
当我将另一个绘图命令添加到上面的代码
testdataframe[0].plot() 时,它将在同一个绘图中绘制此行,如果我添加命令testdataframe[[0,1]].plot() 它将创建一个新的绘图 -
如果我打电话给
testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y']) ,它的风格列表很好,但没有颜色列表
希望有人可以提供帮助,谢谢。
你真是太近了!
您可以在样式列表中指定颜色:
1 2 3 4 5 6 7 8 9 10 | 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) |
另请注意,
1 2 3 4 5 6 7 8 9 10 11 | 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) |
在这种情况下并不实用,但这个概念可能会在以后派上用场。
考虑数据帧
1 2 3 4 5 6 7 8 9 | 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 |
您可以将
1 2 | styles=['bs-', 'ro-', 'y^-'] lws = [2, 1, 1] |
我们可以在
但是,线宽并不容易处理。我首先捕获
1 2 3 | ax = testdataframe.plot(style=styles) for i, l in enumerate(ax.lines): plt.setp(l, linewidth=lws[i]) |
所以我认为答案在于将颜色和样式传递到同一个参数中。以下示例适用于pandas 0.19.2:
1 2 | testdataframe=pd.DataFrame(np.arange(12).reshape(4,3)) testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0) |
不幸的是,似乎不能将多个线宽作为输入传递给matplotlib。