2017-11-03 88 views
0

我正在用一些特定颜色(由rgb值指定)绘制几行Pandas DataFrame。我正在寻找一种方法,通过将绘图线的颜色直接分配给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 

,但有很多超过两行,我真的希望能够通过列标题指定的颜色,使代码易于维护。如:

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

虽然colors关键字实际上并不是字典。 (技术上讲,它的类型转换到列表中,这将产生列标签的列表。)

据我所知,从matplotlib.pyplot.plotpd.DataFrame.plot继承,但我无法找到该colors关键字的文档。这两种方法的文档都没有列出这样的关键字。

+0

难道你只是最初把它放在一本字典,然后拉出值? – 0TTT0

回答

2

如果您创建将字段名称映射到颜色的字典,则可以使用列表理解在列表中编译颜色列表,其中列表名称只是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() 

enter image description here

0

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

example plot

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

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