Matplotlib 轴标签将科学指数移动到同一行

Matplotlib axis label move scientific exponent into same line

我目前正在制作一个 x 轴范围为 0 到 1.3e7 的图。我正在绘制如下:

plt.errorbar(num_vertices,sampled_ave_path_average,yerr=sampled_ave_path_stdev,fmt='.',markersize='1',capsize=2,capthick=2)
plt.xlabel('Number of vertices')
plt.ylabel('Average shortest path length')
plt.xlim(0,1.3*10**7)
plt.savefig('path_length_vs_N.eps', bbox_inches='tight')
plt.savefig('path_length_vs_N.png', bbox_inches='tight')
plt.close()

这会生成一个图表,其中 x 轴刻度标签采用科学记数法,这正是我想要的。然而,我想知道是否可以将 1e7(下面用红色圈出)移动到与其他标签相同的行上? (我意识到这可能会导致对其他值的指数的混淆。)

首先,您可以看以下问题:

第一个可能是一个可能的替代方案(因为你提到了设想的解决方案"might cause confusion about the exponents")。第二个可能会指出一种可能的解决方案,尽管它是关于使用颜色条的。

因此,为了将偏移文本的位置更改为与 xtick 标签一致,可以采用以下方法。

import matplotlib.pyplot as plt
import numpy as np
import types

x = np.linspace(1e7, 9e7)
y = 1-np.exp(-np.linspace(0,5))
fig, ax = plt.subplots()
ax.plot(x,y)


pad = plt.rcParams["xtick.major.size"] + plt.rcParams["xtick.major.pad"]
def bottom_offset(self, bboxes, bboxes2):
    bottom = self.axes.bbox.ymin
    self.offsetText.set(va="top", ha="left") 
    oy = bottom - pad * self.figure.dpi / 72.0
    self.offsetText.set_position((1, oy))

ax.xaxis._update_offset_text_position = types.MethodType(bottom_offset, ax.xaxis)

plt.show()