matplotlib 在Python Plot中,我如何将图表的值绘制为X.X Million,而不是整数,即1,000,000

xmd2e60i  于 2023-04-21  发布在  Python
关注(0)|答案(1)|浏览(124)

我绘制的是每年的乘客人数,但汇总数据以百万为单位,我希望图表仅显示X.X百万
这就是代码:

Pax_Major=MajorCarriers.groupby(by=["YEAR"])["PASSENGERS"].sum().reset_index().sort_values(["YEAR"])

然后我将此设置为plot(我从一个在线示例中找到的代码)

fig, ax = plt.subplots(figsize=(13.33,7.5), dpi = 96)

bar1=ax.bar(Pax_Major["YEAR"], Pax_Major["PASSENGERS"], width=0.6)

ax.set_xlabel('', fontsize=12, labelpad=10)
ax.xaxis.set_label_position("bottom")
ax.xaxis.set_major_formatter(lambda s, i : f'{s:,.0f}')
ax.xaxis.set_tick_params(pad=2, labelbottom=True, bottom=True, labelsize=12, labelrotation=0)
labels = ["97", "98", "99", "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22"]
ax.set_xticks(Pax_Major['YEAR'], labels)
 
ax.set_ylabel('Passengers per year', fontsize=12, labelpad=10)
ax.yaxis.set_label_position("left")
ax.yaxis.set_major_formatter(lambda s, i : f'{s:,.0f}')
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
ax.yaxis.set_tick_params(pad=2, labeltop=False, labelbottom=True, bottom=False, labelsize=12)

ax.bar_label(bar1, labels=[f'{e:,.0f}' for e in Pax_Major['PASSENGERS']], padding=3, color='black', fontsize=8)

colours = ["#bbdefb","#2196f3"]
cmap = mpl.colors.LinearSegmentedColormap.from_list("colour_map", colours, N=256)
norm = mpl.colors.Normalize(Pax_Major['PASSENGERS'].min(), Pax_Major['PASSENGERS'].max())
bar1 = ax.bar(Pax_Major['YEAR'], Pax_Major['PASSENGERS'], color=cmap(norm(Pax_Major['PASSENGERS'])), width=0.6, zorder=2)

这就是我得到的:

但是,而不是,即65,073,314,271在1997年,我想有6510万显示在图表中。
--谢谢!

sqxo8psd

sqxo8psd1#

ax.bar_label(bar1, labels=[f'{e:,.0f}' for e in Pax_Major['PASSENGERS']], padding=3, color='black', fontsize=8)

这是设置标签的行。更改生成标签的方式,如下所示:

new_labels = [
    f'{(e / 1000000):,.1f} million' 
    for e in Pax_Major['PASSENGERS']
]
ax.bar_label(bar1, labels=new_labels, padding=3, color='black', fontsize=8)

f'{(e / 1000000):,.1f} million'是一个格式字符串。{}:之前的所有内容都将被计算,然后:,.1f指定使用'1,000.00'而不是'1.000,00'格式,并四舍五入到小数点后1位。这将与格式字符串的其余部分结合在一起,这只是单词“million”。

相关问题