Matplotlib:在子图中去除科学计数法

7
我想创建一个有四个子图的图形。每一行中的绘图共享相同的y轴,而同一列中的绘图共享相同的x轴。在每个轴上,我使用科学计数法表示。虽然可以使用ticklabel_format删除刻度线的数字,但这并不能移除轴上的指数。通过ax1.xaxis.set_visible(False),可以删除x轴上的1e5,但同时也会删除刻度线。在保留刻度线的情况下,如何仅删除与另一个子图共享轴的子图中的1eX?例如,在子图2中如何消除1e51e2
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()

ax3 = fig.add_subplot(223)
ax1 = fig.add_subplot(221, sharex = ax3)
ax4 = fig.add_subplot(224, sharey = ax3)
ax2 = fig.add_subplot(222, sharex = ax4, sharey = ax1)

#First plot
x = np.arange(0, 10**5, 100)
y = x
ax1.plot(x,y)
ax1.set_title('Subplot 1')

# Third plot
y = -x
ax3.plot(x,y)
ax3.set_title('Subplot 3')

#Second plot
x = np.arange(0, 100)
y = 10**3 * x + 100
ax2.plot(x,y)
ax2.set_title('Subplot 2')

#Fourth plot
y = -10**3 * x - 100
ax4.plot(x,y)
ax4.set_title('Subplot 4')

ax4.ticklabel_format(style = 'sci', axis='x', scilimits=(0,0))
ax3.ticklabel_format(style = 'sci', axis='x', scilimits=(0,0))
ax1.ticklabel_format(style = 'sci', axis='y', scilimits=(0,0))
ax3.ticklabel_format(style = 'sci', axis='y', scilimits=(0,0))

plt.setp(ax1.get_xticklabels(), visible=False)
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.setp(ax4.get_yticklabels(), visible=False)

plt.show()

返回:

这里输入图片描述

2个回答

9
如果你针对每个轴(以ax1为例)添加以下行:

ax1.xaxis.get_offset_text().set_visible(False)
ax1.yaxis.get_offset_text().set_visible(False)

这将从两个轴上删除科学计数法文字。

1
将第一部分修改为:

将第一部分修改为:

ax3 = fig.add_subplot(223)
ax1 = fig.add_subplot(221, sharex = ax3)
ax4 = fig.add_subplot(224)
ax2 = fig.add_subplot(222, sharex = ax4)

然后添加这个:
ax2.axes.xaxis.set_ticklabels([])
ax2.axes.yaxis.set_ticklabels([])
ax4.axes.yaxis.set_ticklabels([])
ax4.axes.yaxis.set_ticklabels([])

最后两行似乎是多余的。子图1的“x”轴仍然有1e5,而子图4缺少“x”轴的刻度标签。 - jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接