matplotlib format_major_ticks不检索轴刻度标签

时间:2017-01-25 10:45:56

标签: python matplotlib axis-labels

使用Python,我试图获得一个跨越多个数量级的轴的刻度标签,以科学记数法显示,这应该是相对简单的:ax1.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2E'))(下面的完整代码)

但这似乎忽略了先前设置的刻度标签,而是以科学计数法格式化range(len(axis_vector)),如图1所示。正确的刻度标签但未以科学记数法显示(不使用{{1 }})如图2所示。

图1:

Figure 1

图2:

Figure 2

如何让它以科学记数法显示实际的刻度标签?

以下是随机生成的样本数据的代码:

ax1.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2E'))

1 个答案:

答案 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)

enter image description here