用pythonmatpltlib画图取上一个子图的xlim传给下一个子图这样两个子图的横坐标就一致了代码如下但是发现在下一个子图设置xlim时可得到正确的返回值但实际不起效果这是为何?帮我修改一下代码xlim=axget_xlim#取上一个子图的xlimdef plotDigitalChannelaxstartenddatalistlabellisttick=1000xlim=0109
可能是因为在设置第二个子图的xlim时,已经超出了第一个子图的范围,所以不起作用。可以尝试在第二个子图设置xlim时,使用第一个子图的xlim作为参考,进行调整。修改代码如下:
def plotDigitalChannel(ax,start,end,datalist,labellist,tick=1000,xlim=(0.1,0.9)):
num=len(datalist)
if num+2!=len(labellist):
return ax
colorlist=allcolorlist[:num]
hexcolorlist=allhexcolorlist[:num]
for i in range(0,num):
xranges = xranges_broken_barh(datalist[i],start)
if len(xranges)>0:
PolyCollection=ax.broken_barh(xranges,(0.9+i, 0.2),color=colorlist[i])
Line2D=ax.axhline(y=i+1, color=colorlist[i], linestyle='-',linewidth=1)
else:
Line2D=ax.axhline(y=i+1, color=colorlist[i], linestyle='-',linewidth=1)
yliminfo=ax.set_ylim(0, num+1)
xliminfo=ax.set_xlim(xlim)
y_pos=np.arange(num+2)
ax.set_yticks(y_pos)
ax.set_yticklabels(labels=labellist)
labels=ax.get_yticklabels()
for i in range(0,num):
labels[i+1].set_color(colorlist[i])
ax.invert_yaxis()
sec_formatter = ticker.FuncFormatter(lambda x, pos: format_sec(x, tick))
ax.xaxis.set_major_formatter(sec_formatter)
ax.grid(linestyle='--')
ax.tick_params(left = False,bottom = False)
return ax
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(10,6))
第一个子图
ax1.plot(x1, y1) ax1.set_title('First Subplot')
第二个子图
ax2.plot(x2, y2) ax2.set_title('Second Subplot')
取第一个子图的xlim,并传递给第二个子图
xlim = ax1.get_xlim() ax2.set_xlim(xlim)
plt.show(
原文地址: http://www.cveoy.top/t/topic/cwWS 著作权归作者所有。请勿转载和采集!