Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib:共享轴上的打印顺序是否会影响轴限制?_Python_Matplotlib_Axes - Fatal编程技术网

Python matplotlib:共享轴上的打印顺序是否会影响轴限制?

Python matplotlib:共享轴上的打印顺序是否会影响轴限制?,python,matplotlib,axes,Python,Matplotlib,Axes,具有不同范围的两个变量将绘制在各自的子图中,但它们的子图共享y轴,因此只有一个y轴范围。y轴范围是否取决于哪个变量进入哪个子批次 例如,假设 x = np.linspace(-100, 100, 1000) 什么时候 ,那么哪个子批接受哪个变量似乎并不重要 fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 4)) axs[0].plot(x, y1) axs[1].plot(x, y2) axs[0].get_shared_y_axe

具有不同范围的两个变量将绘制在各自的子图中,但它们的子图共享y轴,因此只有一个y轴范围。y轴范围是否取决于哪个变量进入哪个子批次

例如,假设

x = np.linspace(-100, 100, 1000)
什么时候

,那么哪个子批接受哪个变量似乎并不重要

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 4))
axs[0].plot(x, y1)
axs[1].plot(x, y2)
axs[0].get_shared_y_axes().join(*axs)
all([ax.set_yscale('log') == None for ax in axs])

给出相同的公共y轴范围

但是,什么时候

y1 = 5e5 * np.sin(x / 5) + 5.5e5
y2 = 2e5 * np.sin(x / 5) + 5.5e5
,情况并非如此,公共y轴范围似乎由最后一个子批次中变量的范围确定。这意味着,如果最后一个子批次中的变量的范围小于第一个子批次中的变量,则第一个子批次中的变量的某些部分会被裁剪掉


这种行为是预期的吗?因为这意味着更大范围的变量始终需要最后绘制,才能完全覆盖所有变量。

我可以在matplotlib 1.4.3中重现这一点,假设这是一个在以后版本中已修复的错误。与语法相同的行为

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 4), sharey=True)
最好的办法是更新matplotlib,但您可以手动指定轴范围,以便在您的情况下进行修复

[ax.set_ylim([np.min([y1,y2]),np.max([y1,y2])) for ax in axs]
那么完整的代码

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 4))
axs[0].plot(x, y1)
axs[1].plot(x, y2)
axs[0].get_shared_y_axes().join(*axs)
for ax in axs:
    all([ax.set_yscale('log') == None ])
    ax.set_ylim([np.min([y1,y2]),np.max([y1,y2])])

plt.show()

使用matplotlib 2.0.0时,效果与预期一致。这里没有剪线。
[ax.set_ylim([np.min([y1,y2]),np.max([y1,y2])) for ax in axs]
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 4))
axs[0].plot(x, y1)
axs[1].plot(x, y2)
axs[0].get_shared_y_axes().join(*axs)
for ax in axs:
    all([ax.set_yscale('log') == None ])
    ax.set_ylim([np.min([y1,y2]),np.max([y1,y2])])

plt.show()