簡體   English   中英

如何根據數據組在matplotlib條形圖上設置不同的顏色?

[英]How to set different colors on matplotlib bar graph based on the group of data?

我創建了這個表: 桌子

每個聯賽都有總評分超過 80 分的足球運動員。

我還創建了一個如下所示的條形圖: 圖形

我寫的代碼是這樣的:

plt.figure(figsize=(15,5))
plt.bar(grouped.short_name,grouped.overall)
plt.title("football players with 80+ rating")
plt.xticks(rotation=90)
plt.ylabel("overall rating")
plt.show()

但我希望該圖表具有基於聯盟球員所代表的不同顏色的列。 例如:來自 Seria A 的球員是 Green,來自德甲的球員 - Red 等等。我還希望圖表有圖例,顯示哪種顏色對應於哪個聯賽。 我怎樣才能做到這一點?

我會使用seaborn並使用hue參數。 您需要確保您的播放器簡稱是唯一的。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = {'league_name':['A','A','A','B','C','C','C'],
        'club_name':['Club 1','Club 1', 'Club 1','Club 2', 'Club 3', 'Club 3', 'Club 3'],
        'short_name':['Joe','Jon','Jack','Ryan','Peter','Steve','Paul'],
        'overall':[83,88,87,90,87,93,81]}

df = pd.DataFrame(data)




ax = sns.barplot(x='short_name', y='overall', data=df, hue='club_name', dodge=False)
plt.title("football players with 80+ rating")
plt.xticks(rotation=90)
plt.ylabel("overall rating")
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0)

在此處輸入圖像描述

感謝您的回復。 經過一番研究,我想出了這個答案:

import random
leagues=grouped.league_name.unique()
plt.figure(figsize=(14,5))
for l in leagues:
    rgb = (random.random(), random.random(), random.random())
    plt.bar(grouped[grouped.league_name==l].short_name,grouped[grouped.league_name==l].overall,color=[rgb],label=l)
    plt.xticks(rotation=90)
    plt.title("players with 80+ rating")
    plt.legend(bbox_to_anchor=(1,1),fontsize=6)
    def value_labels(y):
        for i in range(len(y)):
            plt.text(i,round(y.iloc[i]),round(y.iloc[i]),size=7,ha="center",va="bottom",rotation=0)
    value_labels(grouped.overall)
plt.show()

結果如下:

圖片

它帶有某種我不明白的警報。 我得到了想要的結果。

試試這個代碼片段。

此代碼允許您為條形圖設置隨機顏色。

for i in range(0, len(grouped.short_name)+1):
    l.append(tuple(np.random.choice(range(0, 2), size=3)))
      
plt.bar(grouped.short_name, grouped.overall, color=l)

您應該在繪制圖表時獲取條形列表,然后根據聯賽名稱更改條形顏色。

plt.figure()
bars = plt.bar(short_name, overall)

for i, bar in enumerate(bars):
    if "English" in league_name[i]:
        bar.set_color('r')

plt.show()

暫無
暫無

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

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