Python Jupyter中的Matplotlib内联-显示绘图时如何控制?
我有一个创建图形的函数,出于某种原因,它在Jupyter笔记本中显示了两次,尽管我根本没有运行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
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()
在笔记本中(而不是在导入的某些文件中)。在任何情节发生之前,你都希望他们都出现在笔记本的开头。