刻度中的大值

问题描述

我正在用 Python 制作 6 个图像的子图,并且 y 轴值非常高(范围从 0 到 250 000)。我想以 1000 的倍数显示它们,但不是它们显示为 1K、10K、250K 等,而是显示为 1,10,250 并且在顶部会有 1e3 来显示所有值都是 1000 的倍数。是有一个简单的方法来做到这一点?我这样做是为了节省水平空间,因为我需要它来适应我的论文。这是my output,这是我想要的example,下面是代码

fig,ax = plt.subplots(3,2,figsize=(10,20))

im1 = ax[0,0].hist(im1,bins=300,range=(0.66,0.95))

im2 = ax[0,1].hist(im2,range=(0,0.8))

im3 = ax[1,0].hist(im3,range=(200,280))

im4 = ax[1,1].hist(im4,80))

im5 = ax[2,0].hist(im5,280))   

im6 = ax[2,1].hist(im6,80))

解决方法

您只需将 yticklabels 更改为特定的字符串格式。我在下面展示了一些虚拟数据:

dat = np.random.rand(100000,1)
f,ax = plt.subplots(1,1)
ax.hist(dat) 
pow10 = 3 
ax.set_yticklabels(['{:d}e{:d}'.format(int(i)//(10**pow10),pow10) 
                    if int(i)>(10**pow10) else i for i in ax.get_yticks()])

如果它们甚至不是 10 的幂,这可能会很丑陋,但在这种情况下,您也可以简单地选择编辑 yticks 本身。

编辑

为了解决您更新的问题,您可以简单地更改刻度标签的格式:

dat = np.random.rand(100000,1)
ax.hist(dat)  
ax.ticklabel_format(axis='y',style='sci',scilimits=(0,0))

这将产生这样的轴:

enter image description here