我想绘制一个具有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)
但是当我尝试格式化上方的x轴时,会出现如下错误:
AttributeError:此方法仅适用于ScalarFormatter。
如果我使用另一种方法,那就是使用FormatStrFormatter
from matplotlib.ticker import FormatStrFormatter
axs2.xaxis.set_major_formatter(FormatStrFormatter('%.1e'))
有人可以告诉我如何解决这个问题吗?
答案 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