gpt4 book ai didi

python - 与 gridspec 子图共享轴

转载 作者:行者123 更新时间:2023-12-04 01:58:33 26 4
gpt4 key购买 nike

我正在使用嵌套 GridSpecFromSubplotSpec创建一个嵌套的轴网格。我有两组独立的轴,一个顶部轴和一个底部轴。每组有四个轴,排列在 2x2 网格中。

这是我正在使用的代码和我获得的结果:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gsp

fig = plt.figure()
global_gsp = gsp.GridSpec(2, 1)

for i in range(2):
axes = np.empty(shape=(2, 2), dtype=object)
local_gsp = gsp.GridSpecFromSubplotSpec(2, 2, subplot_spec=global_gsp[i])

for j in range(2):
for k in range(2):
ax = plt.Subplot(fig, local_gsp[j, k],
sharex=axes[0, 0], sharey=axes[0, 0])
fig.add_subplot(ax)
axes[j, k] = ax

for j in range(2):
for k in range(2):
ax = axes[j, k]
x = i + np.r_[0:1:11j]
y = 10*i + np.random.random(11)
ax.plot(x, y, color=f'C{i}')
ax.set_xlabel('x')
ax.set_ylabel('y')


plt.show()

Resulting figure

如您所见,顶部的集合有蓝线,底部的集合有橙色的线,蓝线很好地用极限 [0, 1]x[0, 1] 表示。 ,而橙色线用极限 [1, 2]x[10, 11] 表示.当我使用 plt.Subplot 创建子图时,我用的是 sharexsharey参数在每组的所有四个轴上具有完全相同的比例(但不同组的比例不同)。

我要 避免标签的重复和每个轴的刻度 .我怎样才能做到这一点?

最佳答案

子图轴具有函数 is_{first,last}_{col,row}() (虽然我在任何地方都找不到文档)如 this matplotlib tutorial 所示.这些功能对于仅在正确的位置打印标签和/或刻度很有用。要隐藏刻度标签,shared_axis_demo.py推荐使用 setp(ax.get_{x,y}ticklabels(), visible=False)

fig = plt.figure()
global_gsp = gs.GridSpec(2, 1)

for i in range(2):
axes = np.empty(shape=(2, 2), dtype=object)
local_gsp = gs.GridSpecFromSubplotSpec(2, 2, subplot_spec=global_gsp[i])

for j in range(2):
for k in range(2):
ax = plt.Subplot(fig, local_gsp[j, k],
sharex=axes[0, 0], sharey=axes[0, 0])
fig.add_subplot(ax)
axes[j, k] = ax

for j in range(2):
for k in range(2):
ax = axes[j, k]
x = i + np.r_[0:1:11j]
y = 10*i + np.random.random(11)
ax.plot(x, y, color=f'C{i}')


#
# adjust axes and tick labels here
#
if ax.is_last_row():
ax.set_xlabel('x')
else:
plt.setp(ax.get_xticklabels(), visible=False)

if ax.is_first_col():
ax.set_ylabel('y')
else:
plt.setp(ax.get_yticklabels(), visible=False)


fig.tight_layout()
plt.show()

enter image description here

关于python - 与 gridspec 子图共享轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973018/

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