在jupyter笔记本中同时使用matplotlib内联和qt

时间:2016-06-30 16:23:28

标签: python matplotlib ipython jupyter jupyter-notebook

我正在使用Jupyter(使用IPython)来分析研究数据以及出口数据。我非常喜欢Jupyter提供的笔记本方法:经过很长一段时间我再次访问实验时,我可以很容易地看到这些数字与数据的对应关系。这当然是使用内联后端。

但是,当我想探索新数据时,我更喜欢使用QT后端。它比内联快,并且允许轻松缩放,放大和缩小,并在左下角很好地显示X和Y坐标。此外,我可以使用QT后端来确定在内联后端使用的良好x和y限制。

我尝试使用%matplotlib notebook魔法,但它太慢了。对于一些实验,我正在绘制~500个光谱(每个由~1000个数据点组成),这在内联后端已经很慢。即使数据点较少,笔记本后端使用起来也太慢了。

因此,每当我绘制某些内容时,我都想使用QT后端和内联后端。 (因此,每当我执行绘制数据的单元格时,它都应显示内嵌图像,并弹出QT后端窗口)。通过这种方式,我对笔记本中的图表有了很好的概述,同时也让我可以轻松地浏览我的数据。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

据我所知,一次使用多个后端是不可能的。 我所做的是切换后端并重新绘制。根据我工作的版本或环境,我使用 matplotlib.use()%matplotlib <backend> 完成。 我的印象是这有时不起作用或者可能没有响应,所以我需要重新启动环境。我想维护它并不容易,所以我什至惊讶它几乎总是如此顺利。

可用的后端可以列出:

matplotlib.rcsetup.interactive_bk
matplotlib.rcsetup.non_interactive_bk
matplotlib.rcsetup.all_backends

希望这里有其他有用的信息: https://matplotlib.org/stable/tutorials/introductory/usage.html

答案 1 :(得分:0)

这允许您运行QtConsole,使用plotSin函数绘图,内联和通过QtConsole。

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

...

def plotChirp(Type, Exp, Rand):

    # Orignal Chirp Funciton From:
    # http://stackoverflow.com/questions/19410042/how-to-make-ipython-notebook-matplotlib-plot-inline
    x = np.linspace(0, 3*np.pi, Rand)
    plt.plot(x, np.sin(x**int(Exp)))
    plt.title('A simple chirp ' + Type)
    plt.show()

...

plotChirp("A", 5, 200) # Plots inline if you choose

enter image description here

%connect_info # For your own connection
%qtconsole

QtConsole打开,现在您可以调用您的函数进行外部绘图..

enter image description here

使用%matplotlib qt允许在循环中打印,但遗憾的是它似乎与图重叠。将子图作为一种可能的解决方案。

%matplotlib qt
for i in range(0,2):

    if i == 0:
        plotChirp("B",1, 400)
    else:
        plotChirp("c",6, 1000)

enter image description here