在Matplotlib中以科学计数法显示第一位十进制数字

在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() 

Figure generated

我可能会增加强制情节蜱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() 

这是它的样子。

enter image description here

+1

我非常需要重载_set_format(self,vmin,vmax)。也许Matplotlib 2?但我设法让它为我工作。谢谢! –

你可以得到蜱和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() 

formating ticks

+0

我其实想要这个,但是在y轴上。如果我照你的建议去做,我会失去科学记数法。 –