无法在matplotlib.pyplot

时间:2019-06-07 17:18:47

标签: python-3.x matplotlib formatting

我想绘制一个具有x轴双轴的图形,并将上轴的ticklabel格式化为科学计数法。

import numpy as np
import matplotlib.pyplot as plt

imp1=np.arange(0,2,2/50)
imp1_pdf=np.arange(0,6,6/50)

fig1=plt.figure()
axs1=fig1.add_subplot(111)
axs1.set_xlim(0,2)
axs1.set_ylim(0,6.5)

axs2 = axs1.twiny()

axs1.plot(imp1,imp1_pdf)

new_tick_locations=axs1.get_xticks()

axs2.set_xticks(new_tick_locations)
axs2.set_xticklabels(new_tick_locations/1000)
axs2.axes.ticklabel_format(axis='x',style='sci',scilimits=(0,0))

axs1.grid(b=True, which='major',linestyle='-')
fig1.tight_layout()
fig1.savefig('tickformat.png',dpi=600)

没有ticklabel格式,该图如下所示: enter image description here

但是当我尝试格式化上方的x轴时,会出现如下错误:

  

AttributeError:此方法仅适用于ScalarFormatter。

如果我使用另一种方法,那就是使用FormatStrFormatter

from matplotlib.ticker import FormatStrFormatter

axs2.xaxis.set_major_formatter(FormatStrFormatter('%.1e'))

x轴的上限值与x轴的下限值相同,如下所示: enter image description here

有人可以告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

问题是您正在尝试修改自定义标签,这些标签只是您定义的字符串import re import ast get_mac = re.compile(r"dl_dst=b'(.+?)',") # This should be outside of your loop. result = get_mac.search(fm_line) # This you will call for each line that you need to parse if result: address = ast.literal_eval(f"'{result.group(1)}'") # This will turn your raw `str` in an escaped `str` res = ["{0:x}".format(ord(char)) for char in address] res = ''.join(res) print(res) 。双轴上的实际值与下轴上的相同。您只是在修改刻度线标签。解决问题的一种方法是使用(new_tick_locations/1000)以科学格式构造修改的刻度标签,然后将其分配到上方的x轴。然后,您可以选择要显示的任何因子而不是1000

Decimal

enter image description here