我有一个很大的情节,我发起了:
import numpy as np
import matplotlib.pyplot as plt
fig, axs = plt.subplots(5, 4)
我想在第1列和第2列之间进行共享x轴;并在第3列和第4列之间执行相同操作。但是,第1列和第2列与第3列和第4列不共享同一轴。
我想知道无论如何都会这样做,而不是sharex=True
和sharey=True
所有数字?
PS:This tutorial没有多大帮助,因为它只是在每行/每列内共享x / y;他们不能在不同的行/列之间进行轴共享(除非在所有轴上共享它们)。
答案 0 :(得分:23)
我不确定你想从问题中得到什么。但是,您可以在每个子图中指定在向图中添加子图时应与哪个子图共享哪个子图。
这可以通过以下方式完成:
import matplotlib.pylab as plt
fig = plt.figure()
ax1 = fig.add_subplot(5, 4, 1)
ax2 = fig.add_subplot(5, 4, 2, sharex = ax1)
ax3 = fig.add_subplot(5, 4, 3, sharex = ax1, sharey = ax1)
希望有所帮助
答案 1 :(得分:4)
一个人可以使用Grouper
对象手动管理轴共享,可以通过ax._shared_x_axes
和ax._shared_y_axes
访问该对象。例如,
import matplotlib.pyplot as plt
def set_share_axes(axs, target=None, sharex=False, sharey=False):
if target is None:
target = axs.flat[0]
# Manage share using grouper objects
for ax in axs.flat:
if sharex:
target._shared_x_axes.join(target, ax)
if sharey:
target._shared_y_axes.join(target, ax)
# Turn off x tick labels and offset text for all but the bottom row
if sharex and axs.ndim > 1:
for ax in axs[:-1,:].flat:
ax.xaxis.set_tick_params(which='both', labelbottom=False, labeltop=False)
ax.xaxis.offsetText.set_visible(False)
# Turn off y tick labels and offset text for all but the left most column
if sharey and axs.ndim > 1:
for ax in axs[:,1:].flat:
ax.yaxis.set_tick_params(which='both', labelleft=False, labelright=False)
ax.yaxis.offsetText.set_visible(False)
fig, axs = plt.subplots(5, 4)
set_share_axes(axs[:,:2], sharex=True)
set_share_axes(axs[:,2:], sharex=True)
要以分组方式调整子图之间的间距,请参阅this question。
答案 2 :(得分:0)
子图提供了一个稍微受限但简单得多的选项。局限性是完整的子图行或列。 例如,如果一个人希望所有子图具有共同的y轴,而只对3x2子图中的各个列具有共同的x轴,则可以将其指定为:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(3, 2, sharey=True, sharex='col')