使用Python,我试图获得一个跨越多个数量级的轴的刻度标签,以科学记数法显示,这应该是相对简单的:ax1.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2E'))
(下面的完整代码)
但这似乎忽略了先前设置的刻度标签,而是以科学计数法格式化range(len(axis_vector))
,如图1所示。正确的刻度标签但未以科学记数法显示(不使用{{1 }})如图2所示。
图1:
图2:
如何让它以科学记数法显示实际的刻度标签?
以下是随机生成的样本数据的代码:
ax1.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2E'))
答案 0 :(得分:0)
问题是因为刻度格式化程序直接在tick 值上运行,而不是以前的标签。在您的情况下,y刻度值为np.arange(len(x))
在你的代码中,你将一个数字数组传递给set_yticklabels
方法,该方法在内部只获得了数组中每个值的字符串表示并使用了
labels = [str(x) for x in y]
您要做的是改为创建自定义(格式化)的标签,并使用set_yticklabels
分配这些标签
labels = ['%.2E' % x for x in y]
ax1.set_yticklabels(labels)
如果您想要花哨,可以使用FormatStrFormatter
对象来执行此操作
formatter = mtick.FormatStrFormatter('%.2E')
labels = [formatter(x) for x in y]
ax1.set_yticklabels(labels)