Python Jupyter中的Matplotlib内联-显示绘图时如何控制?

Python Jupyter中的Matplotlib内联-显示绘图时如何控制?,python,matplotlib,jupyter-notebook,Python,Matplotlib,Jupyter Notebook,我有一个创建图形的函数,出于某种原因,它在Jupyter笔记本中显示了两次,尽管我根本没有运行show。我将fig和ax作为此函数的输出传递,并计划稍后再显示它 我混淆了plt、fig和ax功能人员,并猜测答案就隐藏在那里的某个地方 以下是我的代码的匿名版本: import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl %matplotlib inline def

我有一个创建图形的函数,出于某种原因,它在Jupyter笔记本中显示了两次,尽管我根本没有运行
show
。我将fig和ax作为此函数的输出传递,并计划稍后再显示它

我混淆了
plt
fig
ax
功能人员,并猜测答案就隐藏在那里的某个地方

以下是我的代码的匿名版本:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline

def plot_curve(dummydata):
    # builds a chart

    fig,ax = plt.subplots(1) # get subplots
    fig.set_figheight(7)
    fig.set_figwidth(12) #set shape

    plt.plot(dummydata.x1, dummydata.y1,label = 'l1') #curve 1
    plt.plot(dummydata.x2, dummydata.y2,label = 'l2') #curve2

    plt.xlabel('xlabel') #labels
    plt.ylabel('xlabel')
    plt.yscale('linear') #scale and bounds
    plt.ylim(0,100)
    ymin,ymax= ax.get_ylim()
    ax.axhline(1, color='k', linestyle=':', label = 'lab1') #guideline - horizontal
    ax.axvline(2, color='r',linestyle='--', label = 'lab2') #guideline - vertical
    ax.axvline(3, color='g',linestyle='--', label = 'lab3') #guideline - vertical
    ax.arrow(1,2,3,0, head_width=0.1, head_length=0.01, fc='k', ec='k') # arrow
    rect = mpl.patches.Rectangle((1,2), 2,3, alpha = 0.1, facecolor='yellow',
             linewidth=0  , label= 'lab4') #yellow area patch
    ax.add_patch(rect)

    plt.legend()
    plt.title('title')
    return fig,ax
然后用以下词语来称呼它:

for i in range(3):
    dummydata = pd.DataFrame({
           'x1':np.arange(1+i,100,0.1), 
           'y1':np.arange(11+i,110,0.1),
           'x2':np.arange(1+i,100,0.1),
           'y2':np.arange(21+i,120,0.1)
             })

    fig,ax = plot_curve(dummydata) #get the chart
默认情况下,我应该将什么更改为不显示图形,而仅通过命令显示图形? 谢谢

试试这个:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib
通过此导入,打印后不应看到图形。 但您可以通过将
fig
写入IPython单元来查看该图:

dummydata = pd.DataFrame({
           'x1':np.arange(1,100,0.1), 
           'y1':np.arange(11,110,0.1),
           'x2':np.arange(1,100,0.1),
           'y2':np.arange(21,120,0.1)
             })
fig,ax = plot_curve(dummydata) #get the chart

fig # Will now plot the figure.
这是所需的输出吗?

尝试使用
plt.ioff()
禁用matplotlib。禁用交互模式时,绘图将仅显示一个显式的
plt.show()

将熊猫作为pd导入
将numpy作为np导入
将matplotlib.pyplot作为plt导入
将matplotlib导入为mpl
%matplotlib内联
#取消激活交互模式
plt.ioff()
def绘图曲线(dummydata):
#和以前一样的代码
然后在另一个牢房里

范围(3)内的i的
:
dummydata=pd.DataFrame({
“x1”:np.arange(1+i,100,0.1),
“y1”:np.arange(11+i,110,0.1),
“x2”:np.arange(1+i,100,0.1),
“y2”:np.arange(21+i,120,0.1)
})
#我想这不应该在for循环中
#由于我们未处于交互模式,因此不会显示绘图
图,ax=绘图曲线(dummydata)#获取图表
目前还不会显示任何绘图

现在在另一间牢房里

#现在,任何创建但尚未显示的绘图(图)都将最终显示
plt.show()

最后显示了该图。请注意,如果您创建了多个绘图,现在将显示所有这些绘图。

仅部分显示。然后我想在for循环中展示50种不同的
plot\u曲线输出。但到底发生了什么?出于某种原因,我把我的图显示了两次。。真奇怪。我试过你的循环,我只得到一次图。你是说每个图你都得到一次吗?我正在寻找一些更可控的东西,比如
fig.show()
,但它对我不起作用。是的,我看过每个图一次。本周晚些时候我会尝试一些东西。:)@Dimgold只是好奇,当您从线图中移除ax时会发生什么,ax=绘图曲线(dummydata)?从最后一行开始,您尝试在原始脚本中获取图表?仍然不起作用。可能我没有提到的一个重要部分是,打印曲线是从单独的文件导入的。请确保
%matplotlib inline
plt.ioff()
在笔记本中(而不是在导入的某些文件中)。在任何情节发生之前,你都希望他们都出现在笔记本的开头。