从matplotlib子批中的多列生成单打印

2024-09-30 22:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我经常使用matplotlibs子图,我得到了这样的结果:

import mumpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(3, 2, figsize=(8, 10), sharey='row',
                       gridspec_kw={'height_ratios': [1, 2, 2]})
ax[0, :].plot(np.random.randn(128))

ax[1, 0].plot(np.arange(128))
ax[1, 1].plot(1 / (np.arange(128) + 1))

ax[2, 0].plot(np.arange(128) ** (2))
ax[2, 1].plot(np.abs(np.arange(-64, 64)))

我想创建一个图形,在这个(修改的)gridspec示例中,为两个位置创建一个单独的绘图,就像对ax1所做的那样:

^{pr2}$

完整示例请参见:https://matplotlib.org/gallery/userdemo/demo_gridspec02.html#sphx-glr-gallery-userdemo-demo-gridspec02-py

我知道如果我也会用很多次的环境。也因为子批次可以处理GridSpec参数。遗憾的是,它没有真正解释什么是例外。在


Tags: import示例plotmatplotlibdemoasnpplt
1条回答
网友
1楼 · 发布于 2024-09-30 22:14:26

plt.subplots提供了一种创建完全填充gridspec的方便方法。 例如,而不是

fig = plt.figure()
n = 3; m=3
gs = GridSpec(n, m)
axes = []
for i in range(n):
    row = []
    for j in range(m):
        ax = fig.add_subplot(gs[i,j])
        row.append(ax)
    axes.append(row)
axes = np.array(axes)

你可以写一行

^{pr2}$

但是,如果您想自由地选择要填充的网格上的哪些位置,或者甚至要在多个行或列中包含子批,plt.subplots将不会有多大帮助,因为它没有任何选项来指定要占用的gridspec位置。 从这个意义上说,文档非常清楚:因为它没有记录任何可以用来实现非直线网格的参数,所以没有这样的选项。在

是选择使用plt.subplots还是gridspec则是所需绘图的问题。在某些情况下,两者的结合仍然是有用的

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

n=3;m=3
gridspec_kw = dict(height_ratios=[3,2,1])
fig, axes  = plt.subplots(ncols=m, nrows=n, gridspec_kw=gridspec_kw)

for ax in axes[1:,2]:
    ax.remove()

gs = GridSpec(3, 3, **gridspec_kw)
fig.add_subplot(gs[1:,2])

plt.show()

当一个普通的网格首先被定义并且只在我们需要一个行跨越图的位置,我们移除轴并使用gridspec创建一个新的轴。在

enter image description here

相关问题 更多 >