我在matplotlib中使用交互模式来计算一些参数。我想水平绘制两个子图,然后绘制一条穿过它们的水平线。我重现了我的问题,如下面的代码
import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
plt.ion()
f,axarr=plt.subplots(1,2,sharey=True,gridspec_kw={'width_ratios':[100,1]})
axarr[0].set_title('subplot_1')
axarr[1].set_title('subplot_2')
axarr[0].get_xaxis().set_visible(False)
axarr[1].get_xaxis().set_visible(False)
for i in range(100):
data_1 =np.random.randint(100,size=1)
data_2=np.random.randint(100,size=1)
axarr[0].bar(i,data_1,width=1)
axarr[1].bar(1,data_2,width=1)
axarr[0].axhline(y=data_2+5,xmin=0,xmax=i,c='yellow',linewidth=10,zorder=0,clip_on=False,animated=True)
axarr[1].axhline(y=N_level+20,c='yellow',xmin=0,xmax=1,linewidth=10,zorder=0,clip_on=False,animated=True)
plt.pause(0.000000000001)
答案 0 :(得分:0)
您需要删除animated=True
。这将显示该行。
现在问题是你为每个迭代步骤添加一个新行,这样最后,完整的绘图将是黄色的。为避免这种情况,我建议在循环外定义行,并仅为每一步更新其位置。
import matplotlib.pyplot as plt
from matplotlib import gridspec
import numpy as np
plt.ion()
f,axarr=plt.subplots(1,2,sharey=True,gridspec_kw={'width_ratios':[50,1]})
axarr[0].set_title('subplot_1')
axarr[1].set_title('subplot_2')
axarr[0].get_xaxis().set_visible(False)
axarr[1].get_xaxis().set_visible(False)
line = axarr[0].axhline(y=0,xmin=0,xmax=1,c='yellow',linewidth=2,zorder=5,clip_on=False)
for i in range(100):
data_1 =np.random.randint(100,size=1)
data_2=np.random.randint(100,size=1)
axarr[0].bar(i,data_1,width=1)
axarr[1].bar(1,data_2,width=1)
line.set_ydata([data_1,data_1])
plt.pause(0.000000000001)
plt.ioff()
plt.show()
请注意,我遗漏了第二行,因为代码中的变量未定义,我不知道应该显示什么。