Dim*_*old 3 python matplotlib jupyter-notebook
我有一个创建图形的函数,由于某种原因,它在 Jupyter notebook 中显示了两次,即使我根本没有运行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
Run Code Online (Sandbox Code Playgroud)
然后调用它:
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
Run Code Online (Sandbox Code Playgroud)
我应该更改为默认情况下不显示图形,而仅通过我的命令显示它?谢谢
尝试禁用matplotlib交互模式下使用plt.ioff()。禁用交互模式后,绘图将只显示一个明确的plt.show().
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline
# Desactivate interactive mode
plt.ioff()
def plot_curve(dummydata):
# the same code as before
Run Code Online (Sandbox Code Playgroud)
然后在另一个单元格中
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)
})
# I'am assuming this should not be in the for loop
# The plot will NOT be shown because we are not in interactive mode
fig, ax = plot_curve(dummydata) #get the chart
Run Code Online (Sandbox Code Playgroud)
尚未显示任何情节。
现在在另一个单元格中
# Now ANY plot (figure) which was created and not shown yet will be finally shown
plt.show()
Run Code Online (Sandbox Code Playgroud)
剧情终于显示出来了。请注意,如果您创建了多个图,现在将显示所有图。
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |