条形图的条件值粗体或注释

时间:2017-12-07 16:37:58

标签: python data-visualization seaborn

以下查询为顶级代码生成条形图:

df2=final_df.groupby(['ticker'])['ticker'].count().rename(columns={'ticker':''}).reset_index().rename(columns={0:'number_tickers_uploaded'}).reset_index(drop=True)
print(df2)
sns.set(style='darkgrid')
plt.title('Top tickers uploaded in the last week')
result = df2.sort_values('number_tickers_uploaded',ascending=False)
sns.barplot(x='ticker', y='number_tickers_uploaded', data=result.head(8), palette='Set2')

这是一个数据样本:

        ticker    number_tickers_uploaded  
0       BWM       50     
1       IND       25     
2       RIA       18    
3       X         10   
4       Y         6   

生成的条形图按number_tickers_uploaded按降序列出了代码,但我希望将该值加粗(代码或条形本身)并注释为“Z Fund”,如果它等于x或y 。

谢谢!

- 编辑 -

我知道我可以这样注释:

# Annotate with text + Arrow
plt.annotate(
# Label and coordinate
'Z Fund', xy=(25, 50), xytext=(0, 80),

# Custom arrow
arrowprops=dict(facecolor='black', shrink=0.05)
)

但是我试图有条件地注释(在你知道箭头和注释的位置之前) - 不是在看到数据被绘制之后

1 个答案:

答案 0 :(得分:2)

这个问题有点乱,我在理解你想在什么条件下做什么时遇到了问题。据我了解,目的是使刻度标签变为粗体,添加带箭头的注释,并在条形上留有边缘,用于属于某些特殊标签的条形。以下代码执行此操作:

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

df = pd.DataFrame({"name" : list("ABCDXY"), "value" : [5,6,3,5,7,4]})
result = df.sort_values("value",ascending=False)

ax = sns.barplot(x="name", y="value", data=result, palette='Set2')


for i,t in enumerate(ax.get_xticklabels()):
    if t.get_text() in ["X", "Y"]:
        ## bold ticklabels
        t.set_weight("bold")
        ## bar edges
        ax.patches[i].set_edgecolor("k")
        ax.patches[i].set_linewidth(2)
        ## arrow annotations
        ax.annotate("Z Fund",(i, ax.patches[i].get_height()), 
                    xytext=(0,30), textcoords='offset points', ha="center",
                    arrowprops=dict(facecolor='black', shrink=0.05))

plt.show()

enter image description here

相关问题