调整 gridspec 使绘制的数据对齐
Adjusting gridspec so that plotted data aligns
我有几个图表要绘制,所有图表的宽度都是某个单位的倍数,如下图所示。
所以底轴是整个宽度的 1/4,倒数第二个是宽度的 2/4 等等
我使用的代码:
import matplotlib.pyplot as plt
divs = 4
fig = plt.figure()
gs = fig.add_gridspec(ncols = divs, nrows = divs)
axes = [fig.add_subplot(gs[div, div:]) for div in range(divs)]
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
fig.set_figheight(10)
fig.set_figwidth(10)
plt.show()
我的问题是绘图没有完全按照我的要求对齐:第 2 行的绘图开始于第 1 行绘图的“10”刻度线的右侧,同样适用对于第 3 行的图与第 2 行的图等。我希望第 2 行的图的开头与第 1 行的“10”精确同步,其他图也是如此。这是如何实现的(不一定但最好使用 gridspec)?
我尝试添加 axes[row].tick_params(axis="y",direction="in", pad=-22)
以将 y 轴推入绘图内,但这并没有改变对齐方式。我也尝试使用 fig.tight_layout(pad = 0.3)
:这也没有改变对齐方式。
如果将图形 X 轴边距的默认值设置为 0,刻度将匹配。
import matplotlib.pyplot as plt
divs = 4
fig = plt.figure()
gs = fig.add_gridspec(ncols = divs, nrows = divs)
plt.rcParams['axes.xmargin'] = 0.0 #updated
axes = [fig.add_subplot(gs[div, div:]) for div in range(divs)]
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
fig.set_figheight(10)
fig.set_figwidth(10)
plt.show()
子图(gridspec_kw=()...)
import matplotlib.pyplot as plt
divs = 4
fig, axes = plt.subplots(4,1, gridspec_kw=dict(height_ratios=[1,1,1,1]), sharex='col', figsize=(10,10))
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
plt.show()
我有几个图表要绘制,所有图表的宽度都是某个单位的倍数,如下图所示。
所以底轴是整个宽度的 1/4,倒数第二个是宽度的 2/4 等等
我使用的代码:
import matplotlib.pyplot as plt
divs = 4
fig = plt.figure()
gs = fig.add_gridspec(ncols = divs, nrows = divs)
axes = [fig.add_subplot(gs[div, div:]) for div in range(divs)]
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
fig.set_figheight(10)
fig.set_figwidth(10)
plt.show()
我的问题是绘图没有完全按照我的要求对齐:第 2 行的绘图开始于第 1 行绘图的“10”刻度线的右侧,同样适用对于第 3 行的图与第 2 行的图等。我希望第 2 行的图的开头与第 1 行的“10”精确同步,其他图也是如此。这是如何实现的(不一定但最好使用 gridspec)?
我尝试添加 axes[row].tick_params(axis="y",direction="in", pad=-22)
以将 y 轴推入绘图内,但这并没有改变对齐方式。我也尝试使用 fig.tight_layout(pad = 0.3)
:这也没有改变对齐方式。
如果将图形 X 轴边距的默认值设置为 0,刻度将匹配。
import matplotlib.pyplot as plt
divs = 4
fig = plt.figure()
gs = fig.add_gridspec(ncols = divs, nrows = divs)
plt.rcParams['axes.xmargin'] = 0.0 #updated
axes = [fig.add_subplot(gs[div, div:]) for div in range(divs)]
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
fig.set_figheight(10)
fig.set_figwidth(10)
plt.show()
子图(gridspec_kw=()...)
import matplotlib.pyplot as plt
divs = 4
fig, axes = plt.subplots(4,1, gridspec_kw=dict(height_ratios=[1,1,1,1]), sharex='col', figsize=(10,10))
for row in range(divs):
axes[row].plot([1]*10*(divs - row), c = 'r')
axes[row].set_xlabel('', fontsize = 6)
plt.show()