簡體   English   中英

在Pandas v0.20和matplotlib中為條形指定顏色的問題

[英]Problems assigning color to bars in Pandas v0.20 and matplotlib

我正在使用Pandas和Matplotlib在條形圖中定義顏色一段時間。 讓我們假設我們有以下數據幀:

import pandas as pd
pers1 = ["Jesús","lord",2]
pers2 = ["Mateo","apostel",1]
pers3 = ["Lucas","apostel",1]

dfnames = pd.DataFrame([pers1,pers2, pers3], columns=["name","type","importance"])

現在,我想創建一個條形圖,其重要性為數值,人物名稱為刻度,並使用類型列指定顏色。 我已經閱讀了其他問題(例如: 為定義的列定義Pandas / Matplotlib的條形圖顏色 )但它不起作用......

所以,首先我必須定義顏色並將它們分配給不同的值:

colors = {'apostel':'blue','lord':'green'}

最后使用.plot()函數:

dfnames.plot(x="name", y="importance", kind="bar", color = dfnames['type'].map(colors))

好。 唯一的問題是所有的欄都是綠色的:

在此輸入圖像描述

為什么?? 我不知道......我在Spyder和Jupyter進行測試......有什么幫助嗎? 謝謝!

按本GH16822 ,這是在版本引入了回歸錯誤 0.20.3 ,其中,僅所述第一顏色是從傳遞顏色列表拾取。 這不是先前版本的問題。

根據其中一位貢獻者的原因是 -

問題似乎出現在_get_colors 我認為BarPlot應該定義一個_get_colors

 def _get_colors(self, num_colors=None, color_kwds='color'): color = self.kwds.get('color') if color is None: return super()._get_colors(self, num_colors=num_colors, color_kwds=color_kwds) else: num_colors = len(self.data) # maybe? may not work for some cases return _get_standard_colors(color=kwds.get('color'), num_colors=num_colors) 

有幾種選擇 -

  1. 最明顯的選擇是更新到最新版本的pandas(目前為v0.22
  2. 如果你需要一個解決方法,有一個(在問題跟蹤器中也會提到)你將參數包裝在一個額外的元組中 -

     dfnames.plot(x="name", y="importance", kind="bar", color=[tuple(dfnames['type'].map(colors))] 

雖然為了進步,我建議你更新你的熊貓。

我找到了你的問題的另一種解決方案,它的確有效

我直接使用matplotlib庫而不是使用數據框的plot屬性:這里是代碼:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline # for jupyter notebook

pers1 = ["Jesús","lord",2]
pers2 = ["Mateo","apostel",1]
pers3 = ["Lucas","apostel",1]

dfnames = pd.DataFrame([pers1,pers2, pers3], columns=["name","type","importance"])

fig, ax = plt.subplots()
bars = ax.bar(dfnames.name, dfnames.importance)


colors = {'apostel':'blue','lord':'green'}

for index, bar in enumerate(bars) :
    color = colors.get(dfnames.loc[index]['type'],'b') # get the color key in your df
    bar.set_facecolor(color[0])
plt.show()

以下是結果:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM