我试图在一个图中绘制多个函数。图形以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)我该如何实现呢?
答案 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()