Matplotlib AxesGrid对于具有不同范围

时间:2017-09-08 13:43:19

标签: python matplotlib

我试图在一个图中绘制多个函数。图形以2x2矩阵排列。 function1和function2共享一个公共y轴,function1和function3共享一个公共x轴。我不想要情节之间的空格。我希望所有绘图占据屏幕上的相同空间,无论其范围如何。

以下代码几乎可以实现我想要的功能,但它不能很好地扩展。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid

x = np.linspace(-1,1,1000)
y1 = x
y2 = 0.1*x**2
y3 = x**3

fig = plt.figure()
grid = AxesGrid(fig, 111, nrows_ncols=(2,2), axes_pad=0.0, share_all=True)
grid[0].plot(x,y1)                                              
grid[2].plot(x,y2)
grid[1].plot(x,y3)

fig.tight_layout()
plt.show()

这里的问题是function3看起来非常扁平,并且不能很好地利用空间。如果我选择share_all=False,则图表的大小不同。

我想要的是类似于share_all=True的图,但是function3的y轴在范围(0,0.1)内。 function1和function2的y轴应该保留(-1,1)我该如何实现呢?

1 个答案:

答案 0 :(得分:1)

据我了解要求,似乎不需要使用AxesGrid。使用普通plt.subplots,可以获得以下结果,这似乎是您想要的结果

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1,1,1000)
y1 = x
y2 = 0.1*x**2
y3 = x**3

fig, grid = plt.subplots(2,2,sharex="col", sharey="row")
fig.subplots_adjust(wspace=0, hspace=0)
grid[0,0].plot(x,y1)                                              
grid[1,0].plot(x,y2)
grid[0,1].plot(x,y3)

plt.show()

enter image description here