如何解决调整 gridspec 使绘制的数据对齐
我有几个图表要绘制,所有图表的宽度都是某个单位的倍数,如下图所示。
所以底部轴是整个宽度的 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]),sharex='col',figsize=(10,10))
for row in range(divs):
axes[row].plot([1]*10*(divs - row),fontsize = 6)
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。