如何在matplotlib中创建空白子图?

50few1ms  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(91)

我在matplotlib中制作了一组子图(比如3 x 2),但我的数据集少于6个。如何使剩余的子情节为空白?
安排如下所示:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

字符串
这可能会持续几页,但在最后一页,例如,有5个数据集到2,1框将是空的。不过,我将数字申报为:

cfig,ax = plt.subplots(3,2)


因此,在子图2,1的空间中,有一组带有刻度和标签的默认轴。我怎样才能用程序来渲染那个没有坐标轴的空白空间呢?

wlp8pajw

wlp8pajw1#

你总是可以隐藏你不需要的轴。例如,以下代码完全关闭第6个轴:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

字符串
并得到下图:


的数据
或者,请参阅问题Hiding axis text in matplotlib plots的公认答案,以了解保留轴但隐藏所有轴装饰的方法(例如:刻度线和标签)。

nhjlsmyf

nhjlsmyf2#

自从第一次提出这个问题以来,matplotlib中已经添加了一个 * 大大 * 改进的subplot interface。在这里你可以创建你所需要的子情节,而不需要隐藏额外的内容。此外,子图可跨越其他行或列。

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

字符串


的数据

t1rydlwq

t1rydlwq3#

还可以使用Axes.set_visible()方法隐藏子图。

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
    ax = fig.add_subplot(3,2,i+1)
    ax.plot(range(1,6), data[i])
    if i == 5:
        ax.set_visible(False)

字符串

2o7dmzc5

2o7dmzc54#

当你需要的时候,是否可以选择创建子情节?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")

字符串

xfyts7mz

xfyts7mz5#

要删除位于(2,1)的图,可以使用

import matplotlib.pyplot as plt
cfig,ax = plt.subplots(3,2)
cfig.delaxes(ax.flatten()[5])

字符串

xlpyo6sf

xlpyo6sf6#

使用matplotlib的新版本(从3.4.0开始),您可以使用字符串数组来设计子图模式(行和列),并通过调用matplotlib.pyplot.subplot_mosaic来创建图形。
使用cfig, axs = plt.subplot_mosaic(mosaic)代替cfig, ax = plt.subplots(3,2),并以如下方式定义mosaic

mosaic = [['a', 'b'],
          ['c', 'd'],
          ['e', '.']]

字符串
在此模式中,空白子图由'.'表示(默认情况下,这可以在调用中参数化)。您不需要删除空白子图,因为它们甚至没有创建。
要选择绘制轴,只需使用axs[id],其中id是用于标识镶嵌阵列中的子图的字符串。
范例:

mosaic = [['b', 'a'], ['.', 'au']]
kw = dict(layout='constrained')
fig, axs = plt.subplot_mosaic(mosaic, **kw)

ax = axs['b']
ax.grid(axis='y')
ax.bar(n, d)

ax = axs['a']
ax.grid(axis='y')
ax.bar(n, prior)

[...]


x1c 0d1x的数据
使用subplot_mosaic,您不仅可以引入空白子图,还可以合并“单元格”,以便在多个行和/或列上创建子图,只需制作所需的镶嵌阵列,其余代码不变。另外,mosaic不需要是数组,它也可以是多行字符串。例如,从Complex and semantic figure composition,使用:

"""
A.C
BBB
.D.
"""


结果:


相关问题