<p>正如您所注意到的,<code>xscale</code>和<code>yscale</code>不支持简单的线性重新缩放(不幸的是)。作为Hooked答案的替代方案,您可以欺骗标签,比如:</p>
<pre><code>ticks = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x*scale))
ax.xaxis.set_major_formatter(ticks)
</code></pre>
<p>显示x和y缩放的完整示例:</p>
<pre><code>import numpy as np
import pylab as plt
import matplotlib.ticker as ticker
# Generate data
x = np.linspace(0, 1e-9)
y = 1e3*np.sin(2*np.pi*x/1e-9) # one period, 1k amplitude
# setup figures
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
# plot two identical plots
ax1.plot(x, y)
ax2.plot(x, y)
# Change only ax2
scale_x = 1e-9
scale_y = 1e3
ticks_x = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_x))
ax2.xaxis.set_major_formatter(ticks_x)
ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale_y))
ax2.yaxis.set_major_formatter(ticks_y)
ax1.set_xlabel("meters")
ax1.set_ylabel('volt')
ax2.set_xlabel("nanometers")
ax2.set_ylabel('kilovolt')
plt.show()
</code></pre>
<p>最后我得到了一张照片的学分:</p>
<p><a href="https://i.stack.imgur.com/IdZsD.png" rel="noreferrer"><img src="https://i.stack.imgur.com/IdZsD.png" alt="Left: ax1 no scaling, right: ax2 y axis scaled to kilo and x axis scaled to nano"/></a></p>
<p>注意,如果像我一样有<code>text.usetex: true</code>,您可能需要将标签括在<code>$</code>中,就像这样:<code>'${0:g}$'</code>。</p>