[英]Python pandas, Plotting options for multiple lines
I want to plot multiple lines from a pandas dataframe and setting different options for each line. 我想从pandas数据框中绘制多条线,并为每条线设置不同的选项。 I would like to do something like 我想做点什么
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1])
This will raise some error messages: 这会引发一些错误消息:
linewidth is not callable with a list linewidth不能用列表调用
In style I can't use 's' and 'o' or any other alphabetical symbol, when defining colors in a list 在样式中,当在列表中定义颜色时,我不能使用's'和'o'或任何其他字母符号
Also there is some more stuff which seems weird to me 还有一些东西对我来说似乎很奇怪
when I add another plot command to the above code testdataframe[0].plot()
it will plot this line in the same plot, if I add the command testdataframe[[0,1]].plot()
it will create a new plot 当我将另一个绘图命令添加到上面的代码testdataframe[0].plot()
它会在同一个绘图中绘制这一行,如果我添加命令testdataframe[[0,1]].plot()
它将创建一个新的情节
If i would call testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y'])
it is fine with a list in style, but not with a list in color 如果我打电话给testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y'])
就可以了样式列表,但没有颜色列表
Hope somebody can help, thanks. 希望有人可以提供帮助,谢谢。
You're so close! 你真是太近了!
You can specify the colors in the styles list: 您可以在样式列表中指定颜色:
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)
Also note that the plot
method can take a matplotlib.axes
object, so you can make multiple calls like this (if you want to): 另请注意, 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)
Not really practical in this case, but the concept might come in handy later. 在这种情况下并不实用,但这个概念可能会在以后派上用场。
Considering the dataframe testdataframe
考虑数据帧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
You can combine styles
into a single list of strings as in styles
defined below. 您可以将styles
组合到单个字符串列表中,如下面定义的styles
。 I'll also define the linewidths in lws
我还将在lws
定义线宽
styles=['bs-', 'ro-', 'y^-']
lws = [2, 1, 1]
We can use the plot
method on the testdataframe
passing the list styles
to the style
parameter. 我们可以在testdataframe
上使用plot
方法将列表styles
传递给style
参数。 Note that we could have also passed a dictionary (and probably other things as well). 请注意,我们也可以传递一个字典(也可能是其他东西)。
However, line widths are not as easily handled. 但是,线宽并不容易处理。 I first capture the AxesSubplot
object and iterate over the lines attribute setting the line width. 我首先捕获AxesSubplot
对象并迭代线属性设置线宽。
ax = testdataframe.plot(style=styles)
for i, l in enumerate(ax.lines):
plt.setp(l, linewidth=lws[i])
So I think the answer lies in passing the color and style in the same argument. 所以我认为答案在于将颜色和样式传递到同一个参数中。 The following example works with pandas 0.19.2: 以下示例适用于pandas 0.19.2:
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0)
Unfortunately, it seems that passing multiple line widths as an input to matplotlib is not possible. 不幸的是,似乎不能将多个线宽作为输入传递给matplotlib。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.