繁体   English   中英

matplotlib:以交互模式绘制跨越多个子图的水平线

[英]matplotlib: drawing a horizontal line spanning over multiple subplots, with interactive mode

我在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)

但是此代码不会生成此水平线。 我需要有一个与此图相似的图 在此处输入图片说明

您需要删除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()

请注意,我省略了第二行,因为该变量在代码中未定义,并且我不知道该显示什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM