gpt4 book ai didi

python - matplotlib:隐藏子图并用其他子图填充空间

转载 作者:太空狗 更新时间:2023-10-29 20:17:59 25 4
gpt4 key购买 nike

我有一个图形,其中包含三个垂直排列的子图。单击图中后,我希望隐藏第二个子图 ax2 并填充其他图。第二次单击该图应恢复原始绘图和布局。

隐藏子图 ax2 不是问题,但如何重新排列其他子图的位置?

我尝试使用 set_positionset_subplotspec 方法创建一个新的 GridSpec,但没有成功。我确定我在这里遗漏了一些东西,我们将不胜感激。

这是我的代码:

import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure()

gs = gridspec.GridSpec(3, 1, height_ratios=[5, 2, 1])
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharex=ax1)
ax3 = fig.add_subplot(gs[2], sharex=ax2)

visible = True

def toggle_ax2(event):
global visible
visible = not visible
ax2.set_visible(visible)
plt.draw()

fig.canvas.mpl_connect('button_press_event', toggle_ax2)
plt.show()

最佳答案

您可以定义两个不同的 GridSpec。一个有 3 个子图,另一个有 2 个。根据中间轴的可见性,您可以更改其他两个轴的位置以服从第一个或第二个 GridSpec。
(不需要任何虚拟人物,就像其他答案可能暗示的那样。)

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()

gs = gridspec.GridSpec(3, 1, height_ratios=[5, 2, 1], hspace=0.3)
gs2 = gridspec.GridSpec(2,1, height_ratios=[5,3])

ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharex=ax1)
ax3 = fig.add_subplot(gs[2], sharex=ax2)

ax1.plot([1,2,3], [1,2,3], color="crimson")
ax2.plot([1,2,3], [2,3,1], color="darkorange")
ax3.plot([1,2,3], [3,2,1], color="limegreen")

visible = True

def toggle_ax2(event):
global visible
visible = not visible
ax2.set_visible(visible)
if visible:
ax1.set_position(gs[0].get_position(fig))
ax3.set_position(gs[2].get_position(fig))
else:
ax1.set_position(gs2[0].get_position(fig))
ax3.set_position(gs2[1].get_position(fig))

plt.draw()

fig.canvas.mpl_connect('button_press_event', toggle_ax2)
plt.show()

左:原始;右:点击后

enter image description here

关于python - matplotlib:隐藏子图并用其他子图填充空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43937066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com