我有一系列子图,并且我希望他们在除2个子图之外的所有其他子图*享x和y轴(按行).
我知道可以分别创建所有子图,然后再创建add the sharex
/sharey
functionality afterward.
但是,鉴于我必须对大多数子图执行此操作,因此这是很多代码.
一种更有效的方法是创建具有所需sharex / sharey属性的所有子图,例如:
import matplotlib.pyplot as plt
fix, axs = plt.subplots(2, 10, sharex='row', sharey='row', squeeze=False)
然后设置未设置的sharex / sharey功能,假设它可以像这样工作:
axs[0, 9].sharex = False
axs[1, 9].sharey = False
上面的方法不起作用,但是有什么方法可以做到这一点?
解决方法:
您可以使用ax.get_shared_x_axes()获取包含所有链接轴的Grouper对象.然后使用group.remove(ax)从该组中删除指定的轴.您还可以group.join(ax1,ax2)添加新共享.
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(2, 10, sharex='row', sharey='row', squeeze=False)
data = np.random.rand(20, 2, 10)
for row in [0,1]:
for col in range(10):
n = col*(row+1)
ax[row, col].plot(data[n,0], data[n,1], '.')
a19 = ax[1,9]
shax = a19.get_shared_x_axes()
shay = a19.get_shared_y_axes()
shax.remove(a19)
shay.remove(a19)
a19.clear()
d19 = data[-1] * 5
a19.plot(d19[0], d19[1], 'r.')
plt.show(fig)
这仍然需要一些调整来设置刻度,但是右下图现在有其自身的局限性.