如何使用 matplotlib 在单个页面上制作多个图?

新手上路,请多包涵

我编写了一次打开 16 个数字的代码。目前,它们都作为单独的图表打开。我希望他们在同一页面上打开所有内容。不是同一张图。我想在单个页面/窗口上显示 16 个单独的图表。此外,由于某种原因,numbins 和 defaultreallimits 的格式不符合图 1。我需要使用 subplot 命令吗?我不明白为什么我必须这样做,但不知道我还能做什么?

 import csv
import scipy.stats
import numpy
import matplotlib.pyplot as plt

for i in range(16):
    plt.figure(i)
    filename= easygui.fileopenbox(msg='Pdf distance 90m contour', title='select file', filetypes=['*.csv'], default='X:\\herring_schools\\')
    alt_file=open(filename)
    a=[]
    for row in csv.DictReader(alt_file):
        a.append(row['Dist_90m(nmi)'])
    y= numpy.array(a, float)
    relpdf=scipy.stats.relfreq(y, numbins=7, defaultreallimits=(-10,60))
    bins = numpy.arange(-10,60,10)
    print numpy.sum(relpdf[0])
    print bins
    patches=plt.bar(bins,relpdf[0], width=10, facecolor='black')
    titlename= easygui.enterbox(msg='write graph title', title='', default='', strip=True, image=None, root=None)
    plt.title(titlename)
    plt.ylabel('Probability Density Function')
    plt.xlabel('Distance from 90m Contour Line(nm)')
    plt.ylim([0,1])

plt.show()

原文由 FS. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 820
2 个回答

要回答您的主要问题,您需要使用 subplot 命令。我认为将 plt.figure(i) 更改为 plt.subplot(4,4,i+1) 应该可行。

原文由 las3rjock 发布,翻译遵循 CC BY-SA 2.5 许可协议

las3rjock 的答案是不正确的——不知何故 OP 接受了这个答案——代码没有运行,也不是有效的 matplotlib 语法;该答案没有提供可运行的代码,也没有提供任何信息或建议,OP 可能会发现这些信息或建议对于编写自己的代码来解决 OP 中的问题很有用。

鉴于这是公认的答案,并且已经收到了几次赞成票,我想应该进行一些解构。

首先,调用 subplot 不会 给你多个情节;调用 subplot 来创建单个图,以及创建多个图。另外,“changing plt.figure(i)”是不正确的。

plt.figure() (其中 plt 或 PLT 通常是 matplotlib 的 pyplot 库 导入并作为全局变量反弹,plt 或有时是 PLT,如下所示:

 from matplotlib import pyplot as PLT

fig = PLT.figure()

上面的行创建了一个 matplotlib 图形实例;然后为每个绘图窗口调用此对象的 _addsubplot 方法(非正式地认为 x 和 y 轴包含单个子图)。您创建(无论是一个页面上的一个还是多个),就像这样

fig.add_subplot(111)

此语法等效于

fig.add_subplot(1,1,1)

选择一个对你有意义的。

下面我列出了在一页上绘制两个图的代码,一个在另一个之上。格式化是通过传递给 add_subplot 的参数完成的。请注意,第一个图的参数是 ( 211 ),第二个图的参数是 ( 212 )。

 from matplotlib import pyplot as PLT

fig = PLT.figure()

ax1 = fig.add_subplot(211)
ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)])

ax2 = fig.add_subplot(212)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])

PLT.show()

这两个参数中的每一个都是用于在页面上正确放置相应绘图窗口的完整规范。

211 (同样,也可以写成三元组形式,如 (2,1,1) 表示 两行 一列 的绘图窗口;第三个数字指定该特定子图窗口相对于其他子图窗口的顺序- -在这种情况下,这是第一个图(将其放在第 1 行)因此图编号 1,第 1 行第 1 列。

传递给第二次调用 add_subplot 的参数与第一次调用的区别仅在于尾随数字(2 而不是 1,因为该图是第二个图(第 2 行,第 1 列)。

一个包含更多图的示例:如果您想在一页上以 2x2 矩阵配置绘制 四个 图,您将调用 add_subplot 方法四次,传入这四个参数 (221)、(222)、(223) 和 ( 224), 在页面上分别在 10、2、8 和 4 点钟方向创建四个图,并按此顺序绘制。

请注意,四个参数中的每一个都包含两个前导 2——它编码 2 x 2 配置,即两行和两列。

四个参数中每个参数中的第三个(最右边的)数字编码 2 x 2 矩阵中特定绘图窗口的顺序——即第 1 列第 1 (1) 行、第 1 列第 2 (2) 列、第 2 行第 1 (3) 列,第 2 列第 2 (4) 列。

原文由 doug 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题