返回介绍

数学基础

统计学习

深度学习

工具

Scala

四、布局

发布于 2023-07-17 23:38:23 字数 10198 浏览 0 评论 0 收藏 0

1. 简单布局

  1. 简单布局通过Figure.add_subplot(*args,**kwargs)方法来完成,它返回的是Axes实例。当然你也可以通过pyplot.subplot(*args,**kwargs)函数来完成,他返回的也是Axes实例,该函数只是一个便利函数。

SubPlot类是Axes类的子类。因此SubPlot对象也是Axes对象。

  1. 最典型用法是matplotlib.pyplot.subplot(nrows,ncols,plot_number)nrowsncols将图表划分成nrows*ncols大小的网格区域,每一个区域都能存放一个SubPlot;该函数创建plot_number位置处的SubPlot-axes。其中plot_number起始于1,最大值为nrows*ncols

    如果nrowsncolsplot_number都是个位数,则你可以指定一个三位数来简化函数调用matplotlib.pyplot.subplot(integer),其中百分位代表nrows,十分位代表ncols,各位代表plot_number

  2. add_subplot其他的参数:

    • axisbg关键字参数:指定subplot的背景色
    • polar关键字参数:指定subplot是否是极坐标。默认为False
    • projection:指定坐标方式,可以为:'aitoff''hammer''lambert''mollweide''polar''rectilinear'。当projection='polar'等价于ploar=True
    • sharex关键字参数:指定subplot与其他Axes(由该参数值指定)共享xaxis attribute
    • sharey关键字参数:指定subplot是否与其他Axes(由该参数值指定)共享yaxis attribute
  3. 你可以通过pyplot.subplots()函数一次性的创建多个SubPlot

    pyplot.subplot()每次只会创建一个SubPlot

    pyplot.subplots

    其参数有:

    • nrows:行数,默认为1

    • ncols:列数,默认为1

    • sharex

      • 如果为True,则所有SubPlotX axis被共享。此时只有最后一行的X轴可见。
      • 如果为False,则SubPlotX axis不共享,每一个SbuPlotX轴可见。
      • 如果为字符串all,则等效于True
      • 如果为字符串none,则当小于False
      • 如果为字符串row,则每一行的SubPlot共享一个X轴(与False等效)
      • 如果为字符串col,则每一列的SubPlot共享一个X轴(与True等效)

      pyplot.subplots(sharex=True)

      pyplot.subplots(sharex='row')

      pyplot.subplots(sharex='col')

    • sharey

      • 如果为True,则所有SubPlotY axis被共享。此时只有第一列的Y轴可见。
      • 如果为False,则SubPlotY axis不共享,每一个SbuPlotY轴可见。
      • 如果为字符串all,则等效于True
      • 如果为字符串none,则当小于False
      • 如果为字符串row,则每一行的SubPlot共享一个Y轴(与True等效)
      • 如果为字符串col,则每一列的SubPlot共享一个Y轴(与False等效)
    • squeeze

      • 如果为True

        • 如果只创建了一个SubPlot,则返回一个变量(创建的SubPlot对象)
        • 如果创建了N*1或者1*NSubPlot,则返回一个1维向量
        • 如果创建了N*MSubPlot(其中N>1,M>1),则返回一个2维向量
      • 如果为False则始终返回一个2维向量

    • subplot_kw:一个字典参数,用于传递给Axes.add_subplot()来创建SubPlot

    • gridspec_kw:一个字典参数,用于传递给GridSpec构造函数来创建SubPlot存放的网格

    • fig_kw:一个字典参数,用于传递给pyplot.figure()函数。所有前述未能识别的感激案子参数都会传到这里。

    其返回值为figure,ax。其中figure是一个Figure对象;ax取决于squeeze参数。

2. 使用 pyplot.subplot2grid() 函数

  1. 使用pyplot.subplot2grid()函数时,你只需要提供网格形状以及SubPlot位置即可,如: ax=pyplot.subplot2grid((2,2),(0,0)),它等价于ax=pyplot.subplot(2,2,1)。其中subplot2grid()的位置坐标从0开始。

  2. subplot2grid()支持SubPlot横跨或者纵跨多个单元格。colspan关键字参数指定纵向的跨度;rowspanguan尖子参数指定横向的跨度。

    pyplot.subplot2grid()

3. 使用 GridSpec 和 SubplotSpec

  1. 你可以直接创建matplotlib.gridspec.GridSpec然后通过它来创建SubPlot。如:

    
    
    xxxxxxxxxx
    gs=matplotlib.gridspec.GridSpec(2,2) #网格2行2列 matplotlib.pyplot.subplot(gs[0,0])

    等价于matplotlib.pyplot.subplot2grid((2,2),(0,0))

  2. GridSpec对对象提供了类似array的索引方法,其索引的结果是一个SubplotSpec对象实例。如果你想创建横跨多个网格的SubplotSpec,那么你需要对GridSpec对象执行分片索引,如pyplot.subplot(gs[0,:-1])

    使用`GridSpec`和`SubplotSpec`

  3. 如果你使用GridSpec,那么你可以调整由GridSpec创建的SubplotSpeclayout parameter。如:

    
    
    xxxxxxxxxx
    gs=gridspec.GridSpec(3,3) gs.update(left=0.05,right=0.48,wspace=0.05)

    这种用法类似于subplots_adjust,但是它仅仅影响由本GridSpec创建的SubplotSpec。其中gs.update()的关键字参数有:

  • left关键字参数:subplot左侧宽度
  • right关键字参数:subplot右侧宽度
  • bottom关键字参数:subplot底部高度
  • top关键字参数:subplot顶部高度
  • wspace关键字参数:subplot之间的空白宽度
  • hspace关键字参数:subplot之间的空白的高度
  1. 你可以从SubplotSpec创建GridSpec。此时layout parameter由该SubplotSpec指定。如:

    
    
    xxxxxxxxxx
    gs0=gridspec.GridSpec(1,2) gs00=gridspec.GridSpecFromSubplotSpec(3,3,subplot_spec=gs0[0]) matplotlib.gridspec.GridSpecFromSubplotSpec(nrows, ncols, subplot_spec, wspace=None, hspace=None,height_ratios=None,width_ratios=None)

    创建一个GridSpec,它的subplot layout parameter继承自指定的SubplotSpec。 其中nrows为网格行数,ncols为网格列数,subplot_spec为指定的SubplotSpec

从`SubplotSpec`创建`GridSpec`

  1. 默认情况下,GridSpec创建的网格都是相同大小的。当然你可以调整相对的高度和宽度。注意这里只有相对大小(即比例)是有意义的,绝对大小值是没有意义的。如:

    
    
    xxxxxxxxxx
    gs=gridspec.GridSpec(2,2,width_ratios=[1,2],height_ratios=[4,1] plt.subplot(gs[0] ....

    这里width_ratios关键字参数指定了一行中,各列的宽度比例(有多少列就有多少个数字); height_ratios关键字参数指定了一列中,各行的高度比例(有多少行就有多少个数字)。

    不同大小的`GridSpec`网格

  2. GridSpec.tight_layout()

    GridSpec.tight_layout(fig, renderer=None, pad=1.08, h_pad=None, w_pad=None,rect=None): tight_layout能够自动调整subplot param从而使得subplot适应figure area。 它仅仅检查ticklabel、axis label、title等内容是否超出绘制区域。其参数为:

    • fig关键字参数:Figure对象,图表。
    • pad关键字参数:一个浮点数,单位是fontsize,表示figure edgeedges of subplots之间的 填充区域。
    • h_pad关键字参数:一个浮点数,单位是fontsize,示subplots之间的高度,默认为pad
    • w_pad关键字参数:一个浮点数,单位是fontsize,示subplots之间的宽度,默认为pad
    • rect关键字参数:如果给定了该参数为一个列表或元组(是一个矩形的四要素,分别代表左下角坐标,宽度,高度),则指定了网格的轮廓矩形,所有的subplots都位于该矩形中。其坐标系是figure coordinate,从[0...1],如果没有提供该参数,则默认为(0, 0, 1, 1)

    当然你可以使用matplotlib.pyplot.tight_layout()来达到同样的效果。

    `GridSpec.tight_layout()`

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文