【问题标题】:Mutiple plots in a single window单个窗口中的多个绘图
【发布时间】:2026-02-05 17:40:01
【问题描述】:

我需要在一个窗口中绘制许多这样的行(对于 a0 .. a128)。我已经在FacetGridPairGrid 和各处进行了搜索,但找不到。只有regplot 有类似的论点ax,但它不绘制直方图。我的数据是 128 个带有标签列 [0, 1] 的实值特征。我需要将我的 Python 代码中的图表作为 Linux 上的单独应用程序显示。

另外,有没有办法缩放这个直方图以显示 Y 上的相对值,这样右曲线就不会倾斜?

g = sns.FacetGrid(df, col="Result")
g.map(plt.hist, "a0", bins=20)

plt.show()

【问题讨论】:

  • 有点不清楚你的环境和数据是什么样子的。使用 matplotlib 的子图很容易。 FacetGrid 可能会起作用,具体取决于您的数据框。关于您的规范化:matplotlib.hist 采用density=True,您也应该可以将其发布到 seaborn。
  • 更新了答案。你有一个例子如何使用一些 FacetGrid 的子图吗?我没有通过 subplot 的轴。
  • 据我所知,FacetGrid 应该替换 subplot(整个 subplot-thingy)。 编辑: 啊,你想要 FacetGrids 的子图……哎呀……查看文档。我认为 FacetGrid 是一个图形对象(不是轴对象!),你会遇到问题。
  • 我只想要最短的解决方案,我认为可以使用 seaborn 完成。到目前为止,看起来它将是 numpy.histogram() 然后从任何库中手动绘制。
  • 不需要使用 np.hist。只需用 plt.subplots 或任何其他函数构建一个网格,然后用 plt.hist 填充它们。我想如果您的数据框设置正确,FacetGrid 也可以这样做。但是关于你的任务的信息并不多。

标签: matplotlib seaborn


【解决方案1】:

只是一个使用 matplotlib 的简单示例。代码没有优化(丑陋,但简单的绘图索引):

import numpy as np
import matplotlib.pyplot as plt

N = 5

data = np.random.normal(size=(N*N, 1000))

f, axarr = plt.subplots(N, N)  # maybe you want sharex=True, sharey=True

pi = [0,0]
for i in range(data.shape[0]):
    if pi[1] == N:
        pi[0] += 1  # next row
        pi[1] = 0   # first column again

    axarr[pi[0], pi[1]].hist(data[i], normed=True)  # i was wrong with density;
                                                    # normed=True should be used

    pi[1] += 1

plt.show()

输出:

【讨论】: