首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >How to subplot2grid共享

How to subplot2grid共享
EN

Stack Overflow用户
提问于 2018-02-14 12:11:02
回答 1查看 799关注 0票数 0

我已经阅读了关于如何将subplot2grid与共享轴一起使用的问题和答案。由于某些原因,ax.set_xlim被忽略了。我制作了五个图,填充了一个3 x 2子图数组中的前五个位置。对于第一个图,我定义了x和y限制:

代码语言:javascript
复制
ax1.set_xlim([1.0, 2.3]) 
ax1.set_ylim([-40, 140])   

对于第二个图,我使用sharex和sharey来使用ax1.set_xlim和ax1.set_ylim。当我在交互式控制台模式下运行代码并仅绘制第一个图时,将使用定义的x和y限制。接下来,对于第二个图,使用sharex和sharey:

代码语言:javascript
复制
ax2 = plt.subplot2grid((3,2), (0,1), sharex = ax1, sharey = ax1)

此时,当我检查

代码语言:javascript
复制
ax2.get_xlim()
(1.0, 2.3)
ax2.get_ylim()
(-40, 140)

限制匹配

代码语言:javascript
复制
ax1.set_xlim([1.0, 2.3]) 
ax1.set_ylim([-40, 140])     

但是在执行第二图的下一行代码时,

代码语言:javascript
复制
ax2.plot(x2,y, 'bo', label='Sensor 2')

xlim则不同:

代码语言:javascript
复制
ax2.get_xlim()
(1.2, 2.2)

而不是

代码语言:javascript
复制
(1.0, 2.3)

如果我将代码作为脚本运行,那么两个图都使用了不需要的xlim 1.2,2.2这是前两个图的代码:

代码语言:javascript
复制
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.stats import linregress
x1 = np.array([1.592, 1.647, 1.699, 1.752,  1.793,  1.846,  1.900,  1.952,  2.033,  2.064,  2.113,  2.061,  2.008,  1.955,  1.906,  1.862,  1.808,  1.754,  1.701,  1.647,  1.594,  1.538,  1.482,  1.426,  1.373,  1.320,  1.266,  1.225,  1.267,  1.322,  1.376,  1.429,  1.487,  1.542])
x2 = np.array([1.617, 1.674, 1.726, 1.780,  1.822,  1.875,  1.929,  1.983,  2.036,  2.090,  2.143,  2.090,  2.037,  1.983,  1.933,  1.888,  1.833,  1.780,  1.726,  1.671,  1.617,  1.560,  1.503,  1.446,  1.391,  1.336,  1.282,  1.240,  1.282,  1.337,  1.392,  1.445,  1.502,  1.559])
y = np.array([32.12, 42.32, 51.83,  61.65,  69.10,  78.85,  88.51,  98.37,  108.13, 117.93, 127.68, 118.04, 108.32, 98.48,  89.45,  81.19,  71.40, 61.65,   51.86,  41.92,  32.23,  21.98,  11.66,  1.46,   -8.34,  -18.06, -27.78, -35.09, -27.79, -17.89, -8.29,  1.29,   11.43,  21.76])

# first plot
m, b=np.polyfit(x1,y,1) #x1 and y are 34 element vectors
ax1 = plt.gca()
ax1 = plt.subplot2grid((3,2), (0,0))
ax2 = plt.subplot2grid((3,2), (0,1), sharex = ax1, sharey = ax1)
ax1.plot(x1,y, 'bo', label='Sensor 1')
ax1.set_xlim([1, 2.3])
ax1.set_ylim([-40, 140])
ax1.grid(True)
ax1.set_title('Sensor 1')
ax1.plot(x1,m*x1+b,'b-')

# second plot 
m, b=np.polyfit(x2,y,1)
#if ax2 is defined in this code section, (commented out), then a default ax
#is defined and overides ax1.set.lim and ax1.set.lim in code above
#ax2 = plt.subplot2grid((3,2), (0,1), sharex = ax1, sharey = ax1)
ax2.plot(x2,y, 'bo', label='Sensor 2')
ax2.grid(True)
ax2.set_title('Sensor 2')
ax2.plot(x2,m*x2+b,'b-')
plt.show()

不确定我错过了什么。谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2018-02-20 11:32:12

当ax2定义紧跟在ax1定义之后时,则sharex和sharey适用于ax2:

代码语言:javascript
复制
ax1 = plt.subplot2grid((3,2), (0,0))
ax2 = plt.subplot2grid((3,2), (0,1), sharex = ax1, sharey = ax1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48779540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档