在Matplotlib中以科学计数法显示第一位十进制数字
问题描述:
我目前使用科学计数法生成不同的数字,以便在某些地块上产生像2或6这样的蜱虫,但在某些地方则为2.5或8.9。我希望在y轴上总是有一个小数点,即使它增加了一个零。下面是一个例子在Matplotlib中以科学计数法显示第一位十进制数字
import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
plt.ticklabel_format(axis='y', style='sci')
ax.yaxis.major.formatter.set_powerlimits((0,0))
plt.show()
我可能会增加强制情节蜱1.0,2.0,等在y轴?
答
的ScalarFormatter
目前不支持自定义格式为蜱,比如设置小数的数字。但是,您可以扩展该类,以便强制它使用您指定的格式。这里是一个例子:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import ScalarFormatter
class ScalarFormatterForceFormat(ScalarFormatter):
def _set_format(self): # Override function that finds format to use.
self.format = "%1.1f" # Give format here
plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
yfmt = ScalarFormatterForceFormat()
yfmt.set_powerlimits((0,0))
gca().yaxis.set_major_formatter(yfmt)
plt.show()
这是它的样子。
答
你可以得到蜱和format它就像你想要的。
plt.plot(np.arange(1, 10), np.arange(1, 10)**5)
ax = plt.gca()
plt.ticklabel_format(axis='y', style='sci')
ax.yaxis.major.formatter.set_powerlimits((0,0))
xx, locs = plt.xticks()
ll = ['%.1f' % a for a in xx]
plt.xticks(xx, ll)
plt.show()
+0
我其实想要这个,但是在y轴上。如果我照你的建议去做,我会失去科学记数法。 –
我非常需要重载_set_format(self,vmin,vmax)。也许Matplotlib 2?但我设法让它为我工作。谢谢! –