使用yscale时,pyplot会更改y轴刻度标签

时间:2017-11-02 17:31:47

标签: python matplotlib plot

我有一个基于e的semilog图,看起来就像那样。如何摆脱2.71...的数字呈现,而是将其显示为e

enter image description here

plt.figure()
(_, caps, _) = plt.errorbar(xarr, yarr, xerr=xarr_stddev, yerr=yarr_stddev, fmt='.', markersize=1, linewidth=0.25, capsize=1)
for cap in caps:
    cap.set_markeredgewidth(0.25)
plt.grid()
plt.xlabel(r"$t$ [s]")
plt.ylabel(r"$dV/dt$ [V/s]")
plt.yscale('log', basey=np.e)
plt.title('Decay')
plt.savefig("plot_1.pdf", papertype = 'a4', format = 'pdf')

(顺便说一下,开头的三行代码是针对我的错误栏上限。在this solution后继续)

1 个答案:

答案 0 :(得分:2)

最简单的方法是编写自己的FuncFormatter并将其用于Y轴。添加以下行

from matplotlib.ticker import FuncFormatter

def format_labels(x, pos):
    return "e$^{%i}$" % np.log(x)

到图表并将格式化程序设置在savefig行的正上方:

plt.gca().yaxis.set_major_formatter(FuncFormatter(format_labels))

导致以下图表:

enter image description here