python:可以在两个轴上创建3个子图吗?

2 投票
1 回答
1372 浏览
提问于 2025-04-18 16:43

下面的代码会生成4个(2x2)图表:

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,5,1)
fig, ax = plt.subplots(2,2)
ax[0,0].plot(x, x)
ax[0,1].plot(x, x*2)
ax[1,0].plot(x, np.sqrt(x))
ax[1,1].plot(x, x**2)
plt.show()

我想知道有没有办法在上面列出的前三个位置创建3个子图,同时完全去掉右下角的那个图(ax[1,1])?(最终看起来一个子图和主图的x轴对齐,而另一个和y轴对齐。)

1 个回答

2

使用 subplots 会生成所有的子图,即使你没有在里面放任何东西。那如果用 subplot 呢?

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

x = np.arange(0,5,1)
plt.subplot(221).contour(X, Y, Z)
plt.subplot(224).plot(x, x*2)
plt.subplot(223).plot(x, np.sqrt(x))
plt.show() 

补充说明:添加了一个从 这里 改编的轮廓图示例。

撰写回答