以下查询为顶级代码生成条形图:
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)
)
但是我试图有条件地注释(在你知道箭头和注释的位置之前) - 不是在看到数据被绘制之后
答案 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()