python - 调整 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”刻度线的右侧开始,这同样适用于第 1 行的图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()
推荐阅读
- macos - 如何从 Mac 上的 Golang 代码中获取总 RAM?
- javascript - 如何在更改事件上设置切换输入字段的名称属性
- .net - 微服务架构可以使用单个数据库吗?
- html - 在 VSCode 中自动创建标签
- php - PHP preg_replace 从子字符串和结束标记中删除文本?
- angular - 如何在垫表上显示几行的编辑图标
- javascript - 如何根据 id 使用另一个嵌套数组对嵌套数组对象进行排序?
- c# - 身份服务器 OpenID 配置 Http 重定向
- cross-browser - 如何为边缘应用样式?
- react-native - 返回时 react-native Redux 更新状态