注释条形图中的每个条形(排名变化)

时间:2017-03-16 15:42:25

标签: python pandas matplotlib dataframe

因此我尝试使用df中“更改”列中的相应值来注释每个条形图。如果变化是负的,我想让它变成红色,否则为绿色。有人知道怎么做吗?我正在考虑使用注释函数来执行它,因此可以进一步格式化框样式,但是如果这对于这种情况不可行,那么就可以了。数字将放在栏的右侧。

games = pd.read_csv('Video_Games_Sales_as_at_22_Dec_2016.csv')
gbypub=games.Publisher.dropna().value_counts()
gnodupl=games.drop_duplicates(subset='Name')
gbpndupl=gnodupl.Publisher.dropna().value_counts() 
df1=pd.DataFrame(gbypub)
df2=pd.DataFrame(gbpndupl)
df1['Position'] = range(1, len(df1) + 1)
df2['Position'] = range(1, len(df2) + 1)
df2['Change']=df1['Position']-df2['Position']
pd.options.display.float_format = '{:,.0f}'.format
df=df2.iloc[:40]
ax = plt.figure(figsize=(5, 15))
sns.barplot(x=df['Publisher'], y=df.index, data=df, palette='summer')
plt.ylabel('Number of titles per studio', size=15)
plt.xlabel('Studios', size=14)

我使用了以下方法:

for p in ax.patches:
    ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))

但是我不确定如何应用它,因此它使用我当前没有在ax上绘制的dataframe列中的数据,因此该代码不会注释任何内容。

我使用的数据集: https://www.kaggle.com/rush4ratio/video-game-sales-with-ratings

所以我提到了这一点,我陷入了困境: 我还有两件事无法弄清楚: 这是如何使文本也改变像条形的颜色,以及如何将不同的列从数据框作为注释而不是值。我设法只能从该列添加一个值,但目的是从每列的每列中获取相应的值:

ax = plt.figure(figsize=(5, 15))


# Create example DataFrame

# Create list of colors based on a condition 
colors = ['red' if (x < 0) else 'green' for x in df['Change']]

# Create barplot 
ax = sns.barplot(x=df['Publisher'], y=df.index, data=df, palette=colors)
# Annotate every single Bar with its value, based on it's width           

for p in ax.patches:

    width = p.get_width()


    plt.text(60+p.get_width(), p.get_y()+0.55*p.get_height(),
                     df['Change'][0],
                     ha='center', va='center')

0 个答案:

没有答案