[英]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.