Pandas Dataframe:按列名绘制颜色

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)

在此输入图像描述


and*_*ece 5

您可以在绘图之前指定列的顺序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)

  • 从 2021 年开始,它应该是“color”,而不是“colors”。即 `df.plot(color=['蓝色', '红色', '黄色']`。 (4认同)
  • 请注意,截至 2020 年,pandas 表示“请使用颜色”图中的颜色已被弃用 (2认同)