【发布时间】:2019-11-24 21:19:23
【问题描述】:
我正在寻找一种在使用科学记数法时改变指数在轴上的位置的方法。我已经被这个问题困住了好几次了。我已经知道默认格式化程序是ScalarFormatter,但它无法以某种方式访问指数。
有一个workaround,但我不喜欢它,因为它还会操纵现有的刻度标签。到目前为止,我发现,如果使用科学记数法,则轴的 get_xmajorticklabels() 方法返回的列表包含一个文本对象。例如:
import matplotlib.pyplot as plt
import numpy as np
fig= plt.figure(figsize = plt.figaspect(0.5))
ax1= fig.add_subplot(121)
ax1.plot(np.arange(146), np.random.rand(146))
print(ax1.get_xmajorticklabels())
ax2= fig.add_subplot(122)
ax2.plot(np.arange(146)*1e-6, np.random.rand(146))
print(ax2.get_xmajorticklabels())
打印结果为:<a list of 9 Text xticklabel objects> 和 <a list of 10 Text xticklabel objects>
所以我认为附加的列表项可能是指数的文本对象。但是当我打印文本时它是空的。
有没有办法将这个指数作为文本对象访问?那么它的位置应该是可以设置的吧?
【问题讨论】:
-
您可以使用
ax2.xaxis.get_offset_text()获取包含指数的Text对象。虽然这有一个.set_position()方法,但似乎只要重新绘制画布,它的位置就会重置。如果您能弄清楚发生这种情况的位置,那么您应该能够覆盖文本的位置。
标签: python matplotlib