【问题标题】:Matplotlib plotting subplots to existing figureMatplotlib 将子图绘制到现有图形
【发布时间】:2016-11-08 23:04:32
【问题描述】:

我想知道是否有等效的功能

fig, axarr = plt.subplots(3, 2, sharex='col', sharey='row')

其中仅为现有图形生成坐标区数组,而不是创建新图形对象。我基本上需要创建一个 matplotlib 窗口,填充它,并在按下按钮时更新它。我想使用subplots 方法,因为它允许共享轴,但它会强制创建一个新的图形对象,这将打开一个新窗口。

我当前的代码如下所示:

fig = plt.figure()

# When button is pressed
fig.clear()
for i in range(6):
    ax = fig.add_subplot(3, 2, i+1)
    ax.plot(x, y)
plt.draw()

我想做一些类似的事情

fig, axarr = plt.subplots(3, 2, sharex='col', sharey='row')

# When button is pressed
fig.clear()
axarr = fig.subplots(3, 2, sharex='col', sharey='row')
for i in range(3):
    for j in range(2):
        ax = axarr[i][j]
        ax.plot(x, y)
plt.draw()

或者,有没有办法直接使用 matplotlib 窗口?如果这也是一个选项,我可以将新的图形对象绘制到现有窗口中。

如果这有什么不同,我正在使用 PySide 后端。谢谢。

【问题讨论】:

  • 据我所知,您要么使用fig, axarr = plt.subplots(...),要么自己创建图形并手动添加子图。如果我没记错的话,plt.subplots 实际上是在 pyplot 源代码的引擎盖下为您添加每个新轴,即根据您的第一个示例。
  • 是的,但是subplots 方法能够隐藏某些轴标签,并且在使用缩放等交互式工具时还可以将某些子图链接在一起。我不确定如何复制这些行为。
  • 如果您想将两个子图链接在一起,您可以在调用add_subplot 时使用关键字参数sharex = ax_???sharey 来实现。 IE。 ax2 = fig.add_subplots(2, 1, 2, sharex=ax1) 如果 ax1 已经创建。

标签: matplotlib subplot


【解决方案1】:

一个肮脏的解决方法:

您可以使用关键字num 明确指定图形句柄:

import matplotlib.pyplot as plt
fig1, axes1 = plt.subplots(5, 4, gridspec_kw={'top': 0.5}, num=1)
fig2, axes2 = plt.subplots(5, 4, gridspec_kw={'bottom': 0.5}, num=1)
plt.show()

这给出了:

In [2]: fig1 is fig2
Out[2]: True

In [3]: axes1 is axes2
Out[3]: False

所有子图参数必须在开头提供给grispec_kwsubplot_kw 参数。以后不能再轻易改变了。

【讨论】:

    【解决方案2】:

    此功能在主分支 via PR#5146 上实现,该分支面向 mpl 2.1,应该在秋季推出。

    如果您需要它现在运行主分支或供应商该方法作为函数

    axarr = vendored_subplots(fig, ...)
    

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多