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

时间:2017-11-19 15:43:52

标签: python matplotlib plot errorbar

我目前正在制作一个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(下面的红色圆圈)移动到与其他标签相同的线上? (我意识到这可能会引起对其他值的指数的混淆。)

output of plot routine showing location of scientific exponent marker

1 个答案:

答案 0 :(得分:1)

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

第一个可能是另一种选择(因为你提到预想的解决方案"可能会引起对指数的混淆")。第二种可能指向一种可能的解决方案,尽管它是关于使用颜色条。

因此,为了将偏移文本的位置更改为与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()

enter image description here