我试图将两组不同数据的坐标轴固定为科学计数法,其中一组是[1-9] x1e-3,另一组是[1-9] x1e-4。我想把两个坐标轴都设为10^-4,并在小数点后加一位(例如:%.1e)。下面是我尝试过的一个简单版本:我希望轴上的数字至少为1,并且希望两个幂相同。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1,9,9)
y1 = x*10**(-4)
y2 = x*10**(-3)
fig, ax = plt.subplots(2,1,sharex=True)
ax[0].plot(x,y1)
ax[0].ticklabel_format(axis='y', style='sci', scilimits=(-4,-4))
ax[0].yaxis.major.formatter._useMathText = True
ax[1].plot(x,y2)
ax[1].ticklabel_format(axis='y', style='sci', scilimits=(-4,-4))
ax[1].yaxis.major.formatter._useMathText = True
plt.show()
字符串
x1c 0d1x的数据
1条答案
按热度按时间t3psigkw1#
您可以子类化
matplotlib.ticker.ScalarFormatter
并将orderOfMagnitude
属性固定为您喜欢的数字(在本例中为-4
)。以同样的方式,您可以修复要使用的格式。
字符串
虽然乍一看这似乎很复杂,但它真正做的唯一一件事就是覆盖私有方法
_set_orderOfMagnitude
和_set_format
,从而防止它们在后台做一些我们不想做的复杂事情。因为最后,我们所需要的就是,与内部发生的事情无关,self.orderOfMagnitude
总是-4
,self.format
总是"%1.1f"
。的数据
注意:在matplotlib < 3.1中,类需要看起来像
型