首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据数据组在matplotlib条形图上设置不同的颜色?

如何根据数据组在matplotlib条形图上设置不同的颜色?
EN

Stack Overflow用户
提问于 2022-05-31 08:37:25
回答 4查看 1.3K关注 0票数 0

我创造了这张桌子:

每个联赛都有80名以上的足球运动员。

我还创建了一个条形图,如下所示:

我写的代码是:

代码语言:javascript
复制
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的球员是绿色的,来自德甲的球员-红色等等。我也想要有图例来显示哪个颜色对应于哪个联盟。我该怎么做?

EN

回答 4

Stack Overflow用户

发布于 2022-05-31 09:56:16

我使用seaborn并使用hue参数。你需要确保你的球员的短名字是唯一的。

代码语言:javascript
复制
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)

票数 2
EN

Stack Overflow用户

发布于 2022-05-31 12:48:38

谢谢你的回复。经过一番研究,我想出了这个答案:

代码语言:javascript
复制
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()

结果如下:

它伴随着某种我不明白的警觉。不过,我得到了想要的结果。

票数 1
EN

Stack Overflow用户

发布于 2022-05-31 09:02:08

试试这个代码片段。

此代码允许您将任意颜色设置到您的芭蕾中。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72444622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档