Joo*_*eey 5 python matplotlib pandas
我正在绘制一个带有几行的Pandas DataFrame,每行都有一个特定的颜色(由rgb值指定).我正在寻找一种方法,通过将绘图线颜色直接分配给DataFrame列名而不是按顺序列出它们,使我的代码更具可读性.
我知道我可以这样做:
import pandas as pd
df = pd.DataFrame(columns=['red zero line', 'blue one line'], data=[[0, 1], [0, 1]])
df.plot(colors = ['#BB0000', '#0000BB']) # red amd blue
Run Code Online (Sandbox Code Playgroud)
但是有两行以上,我真的希望能够按列标题指定颜色,以使代码易于维护.比如这样:
df.plot(colors = {'red zero line': '#FF0000', 'blue one line': '#0000FF'})
Run Code Online (Sandbox Code Playgroud)
尽管如此,colors关键字实际上不能是字典.(从技术上讲,它是类型转换为列表,它会生成列标签列表.)
我理解pd.DataFrame.plot继承自matplotlib.pyplot.plot但我找不到colors关键字的文档.这两种方法的文档都没有列出这样的关键字.
Jam*_*mes 10
如果创建将列名称映射到颜色的字典,则可以使用列表解析动态构建颜色列表,其中只有get列名称的颜色.这也允许您在错过列时指定默认颜色.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame([[0, 1, 2], [0, 1, 2]],
columns=['red zero line', 'blue one line', 'extra'])
color_dict = {'red zero line': '#FF0000', 'blue one line': '#0000FF'}
# use get to specify dark gray as the default color.
df.plot(color=[color_dict.get(x, '#333333') for x in df.columns])
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以在绘图之前指定列的顺序df[cols]:
import pandas as pd
cols = ['red zero line', 'blue one line', 'green two line']
colors = ['#BB0000', '#0000BB', 'green']
df = pd.DataFrame(columns=cols, data=[[0, 1, 2], [0, 1, 2], [0, 1, 3]])
df[cols].plot(colors = colors)
Run Code Online (Sandbox Code Playgroud)
如果您想确保列和颜色严格配对,您可以随时zip提前:
columns_and_colors = zip(cols, colors)
df[cols].plot(colors = [cc[1] for cc in columns_and_colors])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12516 次 |
| 最近记录: |