如何使用matplotlib在单个页面上创build几个图?
我写了一次打开16位数字的代码。 目前,它们都以单独的图表forms开放 我希望他们能够在同一页面上打开所有内容。 不一样的图。 我想在单个页面/窗口上显示16个单独的graphics。 另外由于某种原因,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()
要回答你的主要问题,你想使用子图命令。 我认为改变plt.figure(i)
plt.subplot(4,4,i+1)
应该工作。
来自las3rjock的答案,不知何故是OP所接受的答案,是不正确的 – 代码不运行,也不是有效的matplotlib语法; 该答案不提供任何可运行的代码,也没有任何信息或build议,说明OP可能在编写自己的代码来解决OP中的问题时发现有用。
鉴于这是被接受的答案,并已经得到了多个赞成票,我想有点解构。
首先,打电话给小区不会给你多个地块; 调用子图创build一个单一的情节,以及创build多个情节。 另外,“改变plt.figure(i)”是不正确的。
plt.figure() (其中plt或PLT通常是matplotlib的pyplot库导入并作为全局variables反弹,plt或有时是PLT,如下所示:
from matplotlib import pyplot as PLT fig = PLT.figure()
上面的那一行创build一个matplotlibgraphics实例; 然后为每个绘图窗口调用此对象的add_subplot方法(非正式地考虑包含单个子图的x&y轴)。 你创build(无论是在一个页面上的一个或几个),像这样
fig.add_subplot(111)
这个语法相当于
fig.add_subplot(1,1,1)
select一个对你有意义的。
下面我列出了在一个页面上绘制两个图的代码。 格式化是通过传递给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 (也可以用3元组forms写成(2,1,1)表示两行 一列的绘图窗口;第三个数字表示该特定子图窗口相对于其他子图窗口的sorting,在这种情况下,这是第一个图(放置在第一行),因此图1的第1行第1列。
传递给add_subplot的第二个参数的参数不同于第一个唯一的尾部数字(2代替1,因为这个图是第二个图(第2行,第1列)。
一个例子有更多的图表:如果你想在一个页面上想要四个图表,在一个2x2matrixconfiguration中,你可以调用add_subplot方法四次,传入这四个参数(221),(222),(223)和( 224),分别按照10,2,8和4点的顺序在页面上创build四个图。
请注意,四个参数中的每一个都包含两个前导2' – 它们编码2 x 2configuration,即两行两列。
在四个参数中的每一个中的第三个(最右边)数字编码2×2matrix中的特定绘图窗口的sorting – 即,第1行col1(1),第1行col2(2),第2行第1栏(3),第2栏第2栏(4)。
由于这个问题是从4年前开始实行的,其中有一个新的functionplt.subplots
非常方便 :
fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
其中axes
是AxesSubplot对象的numpy.ndarray,使得通过使用数组索引[i,j]
的不同子图非常方便。
这也适用于:
for i in range(19): plt.subplot(5,4,i+1)
它在一个页面上总共绘制了19个图表。 格式是5下降和4跨..
@doug&FS。的答案是非常好的解决scheme。 我想分享pandas.dataframe上的迭代解决scheme。
import pandas as pd df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]]) fig = plt.figure(figsize=(14,8)) for i in df.columns: ax=plt.subplot(2,1,i+1) df[[i]].plot(ax=ax) print(i) plt.show()