我试图在matplotlib子绘图环境中将格式设置为两个十进制数字。不幸的是,我不知道如何解决这个任务。
为了避免在y轴上使用科学记数法,我使用了ScalarFormatter(useOffset=False)
,如下面的代码片段所示。我认为我的任务应该通过将更多的选项/参数传递给所使用的格式化程序来解决。但是,我在matplotlib的文档中找不到任何提示。
我如何设置两个小数位数或没有(两种情况都需要)?我无法提供样本数据,不幸的是。
--一点一点--
f, axarr = plt.subplots(3, sharex=True)
data = conv_air
x = range(0, len(data))
axarr[0].scatter(x, data)
axarr[0].set_ylabel('$T_\mathrm{air,2,2}$', size=FONT_SIZE)
axarr[0].yaxis.set_major_locator(MaxNLocator(5))
axarr[0].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[0].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[0].grid(which='major', alpha=0.5)
axarr[0].grid(which='minor', alpha=0.2)
data = conv_dryer
x = range(0, len(data))
axarr[1].scatter(x, data)
axarr[1].set_ylabel('$T_\mathrm{dryer,2,2}$', size=FONT_SIZE)
axarr[1].yaxis.set_major_locator(MaxNLocator(5))
axarr[1].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[1].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[1].grid(which='major', alpha=0.5)
axarr[1].grid(which='minor', alpha=0.2)
data = conv_lambda
x = range(0, len(data))
axarr[2].scatter(x, data)
axarr[2].set_xlabel('Iterationsschritte', size=FONT_SIZE)
axarr[2].xaxis.set_major_locator(MaxNLocator(integer=True))
axarr[2].set_ylabel('$\lambda$', size=FONT_SIZE)
axarr[2].yaxis.set_major_formatter(ScalarFormatter(useOffset=False))
axarr[2].yaxis.set_major_locator(MaxNLocator(5))
axarr[2].tick_params(direction='out', labelsize=FONT_SIZE)
axarr[2].grid(which='major', alpha=0.5)
axarr[2].grid(which='minor', alpha=0.2)
5条答案
按热度按时间nfeuvbwi1#
请参阅相关文档的概述和具体说明
au9on6nz2#
如果您直接使用matplotlib的pyplot(plt),并且您更熟悉新样式的格式字符串,则可以尝试以下操作:
从文档中:
类matplotlib.ticker.字符串方法格式化程序(fmt)
使用新样式的格式字符串(与str.format()所使用的一样)来设置刻度的格式。
用于值的字段必须标记为x,用于位置的字段必须标记为pos。
irtuqstp3#
上面的答案可能是正确的方法,但对我不起作用。
解决这个问题的方法如下:
qlfbtfca4#
使用lambda函数格式化标签
3x具有不同y标记的相同图
最小示例
当然,您也可以使用'real'函数来代替lambdas。https://matplotlib.org/3.1.1/gallery/ticks_and_spines/tick-formatters.html
93ze6v8z5#
在matplotlib 3.1中,您还可以使用ticklabel_format。要禁止不带偏移的科学记数法,请执行以下操作: