【问题标题】:Matplotlib subplots vs axes vs axis (singular / plural)Matplotlib 子图 vs 轴 vs 轴(单数/复数)
【发布时间】:2017-07-12 04:07:18
【问题描述】:

能否请您澄清一些 Matplotlib 术语:

  • “subplots”(或“subplot”?)这个词是“axes”的同义词吗?
  • 什么是“axes”和“axis”的单数/复数?

【问题讨论】:

    标签: matplotlib


    【解决方案1】:

    这确实是一个令人困惑的问题。

    在英语中,单数是轴,复数是轴。两个这样的轴形成两个轴。

    在 matplotlib 中,matplotlib.axes._axes.Axes 对象通常简称为“轴”。该对象包含一个 x 轴和一个 y 轴,因此得名。但说到那个物体,人们会称它为单数轴。其中一些仍然被称为轴。

    每个子图都是一个Axes 对象,但有Axes 对象,没有AxesSubplot 对象。通过子图机制创建的轴是matplotlib.axes._subplots.AxesSubplot。这个类派生自matplotlib.axes._axes.Axes,因此这个子图是一个轴。但是,您也可以通过不同的机制创建轴,例如通过在图中添加轴,fig.add_axes()。这将不是一个子图,而是一个轴,matplotlib.axes._axes.Axes

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    
    print(ax)         # Axes(0.125,0.11;0.775x0.77)
    print(type(ax))   # <class 'matplotlib.axes._subplots.AxesSubplot'>
    
    ax2 = fig.add_axes([0.8,0.1,0.05,0.8])
    
    print(ax2)       # Axes(0.8,0.1;0.05x0.8)
    print(type(ax2)) # <class 'matplotlib.axes._axes.Axes'>
    

    还有其他轴,例如插入轴, mpl_toolkits.axes_grid1.parasite_axes.AxesHostAxes。该对象也称为轴。

    from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
    axins = zoomed_inset_axes(ax, 0.2, loc=3) 
    
    print(axins)       # Axes(0.125,0.11;0.775x0.77)     
    print(type(axins)) # <class 'mpl_toolkits.axes_grid1.parasite_axes.AxesHostAxes'>
    

    【讨论】:

    • 你能解释一下“axes”这个名字背后的想法吗?根据图here,轴看起来像是一个绘图区域或浮动画布,而不仅仅是 x 和 y 轴。我想知道为什么这个对象被命名为“轴”,如果它真的意味着一个绘图区域。谢谢!
    • @xslittlegrass matplotlib 中的“轴”实际上是 matplotlib.axes._axes.Axes 对象,它包含 xaxis、yaxis、它们的标签、刻度等。画布就是一切;它可以承载一个图形,一个图形可以承载多个轴。我们不谈论绘图区域,因为您可以在任何地方绘图,也可以在轴之外。
    • @ImportanceOfBeingErnest,这是一个很好的答案。但是,如果将强调的线写成 每个subplot 对象是一个axes 对象,但有axes 对象,它们不是subplot 对象,您是否认为可以更好地理解。
    • AxesAxesSubplot 有什么区别?如果 subplot 是 AxesSubplot 的一个实例。实例Axes 代表什么?
    【解决方案2】:

    轴是轴的复数。子图通常有一个x-轴和一个y-轴,它们共同构成两个子图的轴

    我们来谈谈函数/类名:

    Figure.add_subplotpyplot.subplot 返回一个 AxesSubplot 对象。这又包含一个XAxis 和一个YAxis 对象。

    fig = plt.figure()
    ax = fig.add_subplot(111)
    x = ax.xaxis
    
    print(type(ax))   # matplotlib.axes._subplots.AxesSubplot
    print(type(x))    # matplotlib.axis.XAxis
    

    XAxis 派生自基类 AxisAxesSubplot 派生自 SubplotBaseAxes

    【讨论】:

      【解决方案3】:

      Axes 只是轴的复数形式。例如,x 轴和 y 轴一起可以称为 2 轴或仅称为轴。子图大部分都包含轴。并且一个图包含许多子图。

                            Figure
                              |
                              v
                      ------------------
                      |                |
                      v                v
                   Subplot1         Subplot2
                      |                |
                      v                v
                     Axes             Axes
                      |                |
                      v                v
                  ---------        -----------
                  |       |        |         |
                  v       v        v         v
                Axis1   Axis2    Axis1     Axis2                             
                               
      
      

      【讨论】:

        猜你喜欢
        • 2019-05-27
        • 2020-08-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多