函数中的mpl_toolkits.axes_grid1.host_subplot与内联后端冲突

时间:2019-05-09 15:01:13

标签: python matplotlib jupyter-notebook jupyter

首先,很抱歉是否在其他地方提出了此要求。

背景

在jupyter笔记本中,我想使用host_subplot绘制具有多个y轴的多个图。这对于一个图形上的一个子图形来说效果很好,但是我想并排使用两个具有相同标记,内容不同的图形。

我意识到我可以做到

fig = plt.figure()
ho1 = host_subplot(121, figure=fig, axes_class=AA.Axes)
ho2 = host_subplot(122, figure=fig, axes_class=AA.Axes)

方法

因为这些图的生成有些冗长,并且我想保持笔记本整洁,所以将它们放在一个函数中,并将要绘制的各个内容传递给该函数。在这里,我只是发布一个测试功能。

import matplotli.pyplot as plt

def test(position, fig):
    from mpl_toolkits.axes_grid1 import host_subplot
    import mpl_toolkits.axisartist as AA
    ho = host_subplot(position, figure=fig, axes_class=AA.Axes)
    ho.scatter(range(4), range(4))
    plt.show()

问题

交互式后端:

%matplotlib nbagg
fig = plt.figure()
test(121, fig)
test(122, fig)

inline backend

我正在使用嵌入式后端,因为我生成了数百个这样的地块,并且许多交互式地块很可能会浪费我的资源。现在,

内联后端:

%matplotlib inline
fig = plt.figure()
test(121, fig)
test(122, fig)

{{3}}

因此,似乎数字被初始化了而不应该初始化的地方。注释掉测试功能中的ho.scatter(..)可以得到一个带有inline后端的正确大小的图形,但是我更喜欢其中包含数据的图形。

问题

可以通过功能方法解决此问题吗?我宁愿避免将图保存到磁盘,然后重新访问它们。 我想念一个更好的选择吗?

我们非常感谢您的帮助。

matplotlib.__version__2.2.4

编辑:

现在我是从远处看的,在任何一个图中,ticklabel都不应该是。那么,如何绘制数据?

0 个答案:

没有答案