当前位置: 首页 > 面试题库 >

了解matplotlib.subplots python

韦修文
2023-03-14
问题内容

我已经构造了一些饼图,并提供了一些帮助。将图像插入饼图切片中。
我的图看起来很棒,现在我需要将它们全部6张放置在2x3的图形中,并在共享的x和y轴上带有通用的刻度线。首先,我正在查看子图,并认为我可以使它起作用。我下载了一些html" target="_blank">示例并开始尝试一些尝试。

    f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True))#,
                 #squeeze=False, subplot_kw=None, gridspec_kw=None))
    print(type(f),'\n',type(a),'\n')#,type(b))

产量:

类’matplotlib.figure.Figure’

类’matplotlib.axes._subplots.AxesSubplot’

而:

    f, (a) = (plt.subplots(nrows=1, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
    print(type(f),'\n',type(a),'\n')#,type(b))

返回:

类’matplotlib.figure.Figure’

类’numpy.ndarray’

当我这样做时:

f, (a,b) = (plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
    print(type(f),'\n',type(a),'\n',type(b))

我得到类似的结果,但是如果nrows = 1和ncols = 2我得到一个错误:

    f, (a,b) = (plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True, squeeze=False, subplot_kw=None, gridspec_kw=None))
    print(type(f),'\n',type(a),'\n',type(b))

ValueError:没有足够的值可解包(预期2,得到1)

但是这又是:

    f, (a , b) = (
    plt.subplots(nrows=1, ncols=2, sharex=True, sharey=True))#,
                 #squeeze=False, subplot_kw=None, gridspec_kw=None))
    print(type(f),'\n',type(a),'\n',type(b))

给出类’matplotlib.figure.Figure’

类’matplotlib.axes._subplots.AxesSubplot’

类’matplotlib.axes._subplots.AxesSubplot’

为什么它是数组或轴,或者为什么2X1有效而1X2不起作用?我希望天哪,我能更好地理解文档。谢谢。


问题答案:

不同的返回类型归因于squeeze关键字参数,默认情况下将plt.subplots()其设置为关键字参数True。让我们通过相应的包装来增强文档:

squeeze:布尔值,可选,默认值:True

  • 如果为True,则从返回的Axes对象中挤出额外的尺寸:

    • 如果仅构造一个子图(nrows = ncols = 1),则返回的单个Axes对象将作为标量返回。
      fig, ax = plt.subplots()
    • 对于Nx1或1xN子图,返回的对象是一个1D numpy对象数组,其中Axes对象以numpy 1D数组形式返回。
      fig, (ax1, ..., axN) = plt.subplots(nrows=N, ncols=1)(对于Nx1)
      fig, (ax1, ..., axN) = plt.subplots(nrows=1, ncols=N)(对于1xN)
    • 对于NxM,将N> 1和M> 1的子图作为2D数组返回。
      fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)
    • 如果为False,则完全不进行压缩:返回的Axes对象始终是包含Axes实例的2D数组,即使最终它是1x1。
      fig, ((ax,),) = plt.subplots(nrows=1, ncols=1, squeeze=False)
      fig, ((ax,), .. ,(axN,)) = plt.subplots(nrows=N, ncols=1, squeeze=False)对于Nx1
      fig, ((ax, .. ,axN),) = plt.subplots(nrows=1, ncols=N, squeeze=False)对于1xN
      fig, ((ax11, .., ax1M),..,(axN1, .., axNM)) = plt.subplots(nrows=N, ncols=M)

或者,您可以始终使用解压后的版本

fig, ax_arr = plt.subplots(nrows=N, ncols=M, squeeze=False)

并索引数组以获得轴ax_arr[1,2].plot(..)

因此,对于2 x 3的网格,如果设置squeeze为,则实际上并不重要False。结果将始终是2D数组。您可以将其解压缩为

fig, ((ax1, ax2, ax3),(ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3)

具有ax{i}作为matplotlib轴对象,或者您可以使用打包版本

fig, ax_arr = plt.subplots(nrows=2, ncols=3)
ax_arr[0,0].plot(..) # plot to first top left axes
ax_arr[1,2].plot(..) # plot to last bottom right axes


 类似资料:
  • 问题内容: 我不太清楚该在哪里抛出该异常。 例如,我正在实现接口,并且不希望任何人调用该方法: Future#get(long,TimeUnit)。 所以,我可以扔吗? 事情是方法的规范并没有说明抛出异常。反过来,例外 抛出以指示不支持请求的操作。 类UnsupportedOperationException 我的意思是,如果您不希望调用它,通常会抛出它,否则可能会因为不是所有方法都已实现而被认为

  • 问题内容: 我试图了解Go中的并发性。特别是,我编写了以下线程不安全程序: 我认识到我应该使用渠道来防止与发生竞争,但这不是重点。程序打印,然后似乎永远循环(不再打印任何内容)。我希望它能打印出无限的数字列表,可能由于竞态条件而跳过某些数字并重复其他数字(或更糟的是,在更新数字时打印数字)。 我的问题是:为什么程序只打印一行? 只是要清楚一点:对于这个玩具示例,我不是故意使用渠道。 问题答案: 关

  • 问题内容: 我了解这是一个框架;甚至还有一个开源的跨平台游戏开发库。我转到libgdx主页,并按照视频教程中的说明进行操作。正确设置项目后,我可以在多个受支持的平台上运行默认的my- gdx-game项目。太好了,花花公子…现在呢? 我一直在搜索论坛,Wiki,javadocs和许多其他站点,以寻找体面的简单操作方法。不幸的是,我找不到任何东西,那里的大多数帮助都假设您对这个库有一些基本的了解。

  • 问题内容: JNDI就像是类固醇的地图,对吗?我使用键来查找对对象的引用。另外,什么是InitialContext?我似乎不知道这个主意。 问题答案: 从概念上讲,JNDI就像类固醇。 允许您从命令行将参数传递给代码。同样,JNDI允许您在代码外部(例如,在应用程序服务器配置文件中)配置任意对象,然后在代码中使用它们。 换句话说,它是Service Locator模式 的实现:您的代码从中心注册表

  • 问题内容: 我正在尝试使用触发两个请求,然后在两个请求完成后调用一些函数。这是我的代码: 但是,这没有按预期方式工作。Ajax调用将返回要在其中使用的数据,而Ajax调用将返回要分配给var count并随后在中使用的count 。 但是,当我启动上面的代码时,先被调用,然后再将数据保留为as 。我如何才能做到这一点,据我所知,只有当两个返回的函数都执行时,才能进行。我希望两个ajax调用都应该并

  • 问题内容: 我遇到了“ 高级Linux编程”中的 一个概念。这里是一个链接:请参阅 4.5 GNU / Linux线程实现 。 我对作者所说的概念很清楚,但是我对他解释的为线程打印processID的程序感到困惑。 这是代码 根据作者,上述代码的输出为 我编译时得到的输出是 我知道,创建线程时,Linux内部调用 clone (大多数情况下),就像 fork 系统调用创建进程一样。唯一的区别是在进

  • 问题内容: 我终于升级了python版本,并发现了新功能。除其他外,我正在为新方法scratch之以鼻。从文档: 只要包含类被子类化,就会调用此方法。那么cls是新的子类。如果定义为普通实例方法,则此方法将隐式转换为类方法。 因此,按照文档中的示例,我开始进行一些操作: 产生以下输出: 我知道在子类定义 之后 会调用此方法,但是我的问题特别是关于此功能的用法。我也阅读了PEP 487 文章,但并没

  • 问题内容: 我是pytorch的新手,我很难理解其工作原理。 我已经浏览了https://pytorch.org/docs/stable/nn.html中的文档,但可能没有什么意义。 有人可以帮忙吗? 我正在处理的代码段: 问题答案: 我将为您分解。如您所知,张量是多维矩阵。原始形式的参数是张量,即多维矩阵。它是变量类的子类。 与模块关联时,会出现变量和参数之间的差异。当参数与作为模型属性的模块关