Python 如何在seaborn条形图中绘制和注释多个数据列
我有一个如下所示的数据帧: 我使用了一个条形图来表示每一行的订阅者。这就是我所做的:Python 如何在seaborn条形图中绘制和注释多个数据列,python,pandas,matplotlib,seaborn,bar-chart,Python,Pandas,Matplotlib,Seaborn,Bar Chart,我有一个如下所示的数据帧: 我使用了一个条形图来表示每一行的订阅者。这就是我所做的: data = channels.sort_values('subscribers', ascending=False).head(5) chart = sns.barplot(x = 'name', y='subscribers',data=data) chart.set_xticklabels(chart.get_xticklabels(), rotation=90) for p in chart.patch
data = channels.sort_values('subscribers', ascending=False).head(5)
chart = sns.barplot(x = 'name', y='subscribers',data=data)
chart.set_xticklabels(chart.get_xticklabels(), rotation=90)
for p in chart.patches:
chart.annotate("{:,.2f}".format(p.get_height(), '.2f'), (p.get_x() + p.get_width() / 2., p.get_height()), ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')
现在我想在同一个图上显示每个用户的“视频计数”。目的是比较订户数量与视频数量之间的关系。我如何在图表上描述这一点?数据
需要使用将数据转换为长格式
由于值的规模,将“log”用于
例如,“猫”中的所有类别都包括在内。
在熔化前仅选择所需的列,或使用dfl=dfl[dfl.cats.isin['sub','vc']筛选所需的“cats”。
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
导入seaborn作为sns
设置数据帧
数据={'vc':[76,47,140,106,246],
"电视":[29645400,28770702,50234486,3070417,272551386],,
‘sub’:[6610015900445003700076700],
'name':['a','b','c','d','e']}
df=pd.DataFramedata
vc电视子名称
0 76 29645400 66100 a
1472877070215900B
21405023448644500摄氏度
转换为长格式
dfl=df.meltid_vars='name',var_name='cats',value_name='values'
.sort_values'values',升序=False。reset_indexdrop=True
命名猫的价值观
0电子电视272551386
1c电视50234486
二维电视3070417
自matplotlib v3.4.2版起更新
使用
有关其他格式选项,请参见页面。
使用seaborn v0.11.1进行测试,该版本使用matplotlib作为绘图引擎。
情节
图,ax=plt.子图尺寸=12,6
sns.barplotx='name',y='values',data=dfl,hue='cats',ax=ax
ax.setxticklabelsax.getxticklabels,旋转=0
ax.set_yscale'log'
对于ax容器中的c:
设置条形图标签
ax.bar_labelc,fmt='%.0f',label_type='edge'
注释资源-来自matplotlib v3.4.2
使用seaborn v0.11.1绘制
使用版本3.4.2之前的matplotlib
请注意,使用.annotate和.patches比使用.bar\u标签要详细得多。
情节
图,ax=plt.子图尺寸=12,6
sns.barplotx='name',y='values',data=dfl,hue='cats',ax=ax
ax.setxticklabelschart.getxticklabels,旋转=0
ax.set_yscale'log'
对于ax.patches中的p:
ax.annotatef{p.get_height:.0f},p.get_x+p.get_width/2.,p.get_height,
ha='center',va='center',xytext=0,7,textcoords='offset points'