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'