我使用嵌套的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()
如您所见,顶部有蓝线,底部有橙色线,蓝线用限制[0, 1]x[0, 1]
很好地表示,而橙色线用限制{{1 }}。当我使用[1, 2]x[10, 11]
创建子图时,我使用plt.Subplot
和sharex
参数在每个集合中的所有四个轴上具有完全相同的比例(但是在不同集合中具有不同的比例)。 / p>
我想避免重复标签和每个轴的刻度。我怎样才能做到这一点?
答案 0 :(得分:2)
子图轴具有函数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()