我创造了这张桌子:

每个联赛都有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()但我希望图表有不同颜色的列,基于联盟球员所代表的。例如:来自塞里亚A的球员是绿色的,来自德甲的球员-红色等等。我也想要有图例来显示哪个颜色对应于哪个联盟。我该怎么做?
发布于 2022-05-31 09:56:16
我使用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)

发布于 2022-05-31 12:48:38
谢谢你的回复。经过一番研究,我想出了这个答案:
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()结果如下:

它伴随着某种我不明白的警觉。不过,我得到了想要的结果。
发布于 2022-05-31 09:02:08
试试这个代码片段。
此代码允许您将任意颜色设置到您的芭蕾中。
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)https://stackoverflow.com/questions/72444622
复制相似问题