繁体   English   中英

Pandas Dataframe:按列名绘制颜色

[英]Pandas Dataframe: plot colors by column name

我正在用几行绘制 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 and blue

但是有很多多于两行,我真的很希望能够按列标题指定颜色,以使代码易于维护。 比如这个:

df.plot(colors = {'red zero line': '#FF0000', 'blue one line': '#0000FF'})

但是,colors 关键字实际上不能是字典。 (从技术上讲,它被类型转换为列表,从而产生一个列标签列表。)

我知道pd.DataFrame.plotmatplotlib.pyplot.plot继承,但我找不到关于colors关键字的文档。 这两种方法的文档都没有列出这样的关键字。

如果您创建一个将列名映射到颜色的字典,您可以使用列表理解来动态构建颜色列表,您只需从列名中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()

在此处输入图片说明

您可以在使用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)

示例图

如果您想确保列和颜色严格配对,您可以随时提前zip

columns_and_colors = zip(cols, colors)
df[cols].plot(colors = [cc[1] for cc in columns_and_colors])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM