首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将子图添加到函数生成的图形中

将子图添加到函数生成的图形中
EN

Stack Overflow用户
提问于 2021-09-20 07:09:18
回答 1查看 102关注 0票数 0

我使用状态模型的irf函数生成一个图。然后,我使用ax1 = fig.add_subplot(211)向该图形添加一个子图。代码看起来像:

代码语言:javascript
运行
AI代码解释
复制
irf = results.irf()
fig = irf.plot( plot_stderr= False, impulse = columns[1], response = columns[0])

ax1 = fig.add_subplot(211)          

ax1.plot(df[columns].dropna().index, df[columns].dropna().iloc[:, 1], color='red')
ax1.tick_params(axis='y', labelcolor='red')

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis
ax2.plot(df[columns].dropna().index, df[columns].dropna().iloc[:, 0], color='blue')
ax2.tick_params(axis='y', labelcolor='blue')
plt.subplots_adjust(hspace = 10)

这就产生了:

Problem:如您所见,较低的图(irf图)被剪掉了。当我添加plt.subplots_adjust(hspace = 10)时,我得到:

这在一定程度上有所帮助,但代价是减少顶部子图的大小,这是不可取的。

问题:如何在没有剪报的情况下得到大小相等的两个子图。我希望我可以从fig, (ax1, ax2) = plt.subplots(2,1)开始,然后将ax1传递给irf.plot()。那我就可以控制两把斧头了。但是显然没有办法将ax传递给irf.plot()。它只是创造了自己的形象。如果有办法的话,我甚至会满意地把这两个数字分开,然后加入它们,并把它们作为一个数字来保存。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 07:38:54

这里的基本问题是,irf.plot正在创建一个有一个子图的图形(一行、一列)。然后,使用add_subplot(211)添加第二个子图,它告诉matplotlib将其安排在2行配置的顶部行中。但是原来的子图没有被修改,所以它的一部分被新子图(ax1)隐藏。

据我所见,在创建时,irf.plot似乎没有任何选项来控制这一点。

但是我们可以做的是在创建后使用GridSpec修改子图位置(例如在这个答案中),然后添加新的子图。

例如,类似这样的东西可能会奏效:

代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

irf = results.irf()
fig = irf.plot(plot_stderr=False, impulse=columns[1], response=columns[0])

# Change position of irf plot axes
ax_irf = fig.get_axes()[0]
gs = gridspec.GridSpec(nrows=2, ncols=2)
ax_irf.set_position(gs[0, 0].get_position(fig))
ax_irf.set_subplotspec(gs[0, 0])  # this might be superfluous

# Now add second subplot
ax1 = fig.add_subplot(gs[1, 0])          

ax1.plot(df[columns].dropna().index, df[columns].dropna().iloc[:, 1], color='red')
ax1.tick_params(axis='y', labelcolor='red')

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis
ax2.plot(df[columns].dropna().index, df[columns].dropna().iloc[:, 0], color='blue')
ax2.tick_params(axis='y', labelcolor='blue')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69256787

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文