我必须在(0, 32000)
范围内绘制值。当我这样做时,我得到以下刻度标签:
0, 5000, 10000, 15000, 20000, 25000, 30000, 35000
但我希望有以下内容:
0, 5, 10, 15, 20, 25, 30, 35
使用轴倍增器(在刻度标签下面的那个小数字)x 10^3
。我真的需要x 10^3
。
我知道如何强制matplotlib使用轴倍增器。当我使用以下内容时:
fmt = ScalarFormatter()
fmt.set_powerlimits((-3, 3))
ax.xaxis.set_major_formatter(fmt)
或者这个:
pylab.ticklabel_format(axis='x', style='sci', scilimits=(-3, 3),
useOffset=False)
matplotlib总是以轴乘数x 10^4
返回,所以我得到了这些丑陋的刻度标签:
0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5
您同意乘数x 10^3
会产生更好的刻度标签。如何设置10^3
而不是10^4
?
This question类似,但不涉及为轴倍增器设置具体值。
答案 0 :(得分:1)
在available tickers中,有两个选项:
EngFormatter()
FuncFormatter()
例如,使用EngFormatter
可获得SI prefixes,还可以通过传递unit='Hz'
获得一个单位。
通常,您可以定义自己的格式化程序
scale_factor = 10**3
fmt = mpl.ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_factor))
编辑:
您还可以将ScalarFormatter
子类化,并覆盖幅度确定的顺序,如:
class MagnitudeFormatter(matplotlib.ticker.ScalarFormatter):
def __init__(self, exponent=None):
super().__init__()
self._fixed_exponent = exponent
def _set_order_of_magnitude(self):
if self._fixed_exponent:
self.orderOfMagnitude = self._fixed_exponent
else:
super()._set_order_of_magnitude()
然后使用MagnitudeFormatter(3)
作为格式化程序。这样做的好处是保留了“ 1e3”轴装饰。
答案 1 :(得分:0)
这可能不是您要查找的答案,但是您可以指定轴刻度标题的列表。例如,与其绘制从1到10的每个刻度线,不如绘制['1', '', '3', '', '5', '', '7', '', '9']
这样的列表,它只会在其他每个刻度线上显示一个刻度线标签。这意味着只要您要绘制的域不变,您就可以指定要显示的确切字符串。如果您希望我可以在执行此操作的地方张贴一些代码。