如何使matplotlib plot不自动向下舍入值,如何使数字更可读?

xdnvmnnf  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(110)

0我有这个代码,我正在制作一个条形图,问题是我的BNP(GDP)值相当大,我们正在谈论数百万、数十亿和数万亿。当我绘制这些值时,它们被四舍五入为1、2、3、4等。有没有一种方法可以得到实际值,我觉得它比那些小数字更有意义?

import matplotlib.pyplot as plt

plt.barh(landStolpediagram, BNPStolpediagram)
plt.xlabel("BNP")
plt.ylabel("Land")
plt.title("Dine valgte land og deres BNP verdi")
plt.show()

我想用这个函数来取整

def konverter(tall):
    magnitude = 0
    while abs(tall) >= 1000:
        magnitude += 1
        tall /= 1000.0
    return '%.3f%s' % (tall, ['', 'K', 'Mn', 'Bn', 'Tn'][magnitude])

这个问题的问题是最低的GDP值想要有一个条形图。有什么解决方案吗?另外,如果我使用这个函数,值不会从最低到最大排序,我该如何解决这个问题呢?
额外:当我通过“转换器”函数运行这些数字时,它会绘制出这样的图表

这就是我想要的,我只是想让这些值从低到高排序,最低的国家将有一个酒吧。

ndh0cuux

ndh0cuux1#

你应该在X轴上使用对数刻度。
你也可以使用plt.xticks来修改你的x轴的标签,使之成为你想要的样子。

import matplotlib.pyplot as plt

landStolpediagram = ["ex1","ex2"]
BNPStolpediagram = [1,2e10]
plt.barh(landStolpediagram, BNPStolpediagram)
plt.xlabel("BNP")
plt.ylabel("Land")
plt.title("Dine valgte land og deres BNP verdi")
plt.xscale('log')  # This line sets x axis to log scale
def konverter(tall):
    magnitude = 0
    if tall < 10:
        return str(tall)
    while abs(tall) >= 1000:
        magnitude += 1
        tall /= 1000.0
    return '%d%s' % (tall, ['', 'K', 'Mn', 'Bn', 'Tn'][magnitude])
plt.xticks(plt.xticks()[0],[konverter(x) for x in plt.xticks()[0]])
plt.show()

相关问题