pandas 如何为bar_label设置科学记数法中标签的格式

q5iwbnjs  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(176)

我正在绘制一个海运条形图中的数据。我想从我的pandas dataframe中标记一些东西到条形图中。我已经弄清楚了标记部分(请参阅下面的代码复制),但我仍然想将其转换为科学记数法。

import pandas as pd
d = {'name': ['experiment1','experiment2'], 'reads': [15000,12000], 'positiveEvents': [40,60]}
df = pd.DataFrame(d)
df['proportianPositive'] = df['positiveEvents']/df['reads']

p = sns.barplot(data=df,x='name',y='positiveEvents', palette = 'colorblind', alpha =0.8)
p.bar_label(p.containers[0],labels=df.proportianPositive, padding = -50, rotation=90)
plt.show()

结果:

如何将df.proportianPositive转换为科学记数法,以便它显示在条形图上?

a1o7rhls

a1o7rhls1#

  • 如前所述,labels=取代fmt=,因此它们不能一起使用。
  • p.containers[0]<BarContainer object of 2 artists>,这是描述条形图的属性。
  • 如果使用默认高度(垂直条)或宽度(水平条),则使用fmt='%.3E'
  • 如果使用自定义标签,则必须将格式应用于传递给labels=的对象
  • pandas.Series的情况下:labels = df['proportianPositive'].map(lambda v: f'{v:.3E}')。参见Difference between map, applymap and apply
  • 对于列表理解:labels = [f'{v:.3E}' for v in df.proportianPositive]
  • 这两个选项都使用现代f-string formatting
  • 有关使用matplotlib.pyplot.bar_label的其他详细信息和示例,请参见How to add value labels on a bar chart

一米十一秒

ax = sns.barplot(data=df, x='name', y='positiveEvents', palette='colorblind', alpha=0.8)
xa.bar_label(ax.containers[0], fmt='%.3E')

一米十一分

ax = sns.barplot(data=df, x='name', y='positiveEvents', palette='colorblind', alpha=0.8)

labels = df['proportianPositive'].map(lambda v: f'{v:.3E}')  # pandas.Series
# labels = [f'{v:.3E}' for v in df.proportianPositive]  # list comprehension
ax.bar_label(ax.containers[0], labels=labels)

gwbalxhn

gwbalxhn2#

这可能是因为labels参数覆盖了fmt参数。尝试格式化标签:

p.bar_label(p.containers[0], padding = -50, rotation=90,
            labels=df.proportianPositive.apply('{:.2e}'.format), 
            )

输出:

相关问题