2017-11-03 124 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])