如何使用matplotlib库实现图形局部数据放大显示(matplotlib,开发技术)

时间:2024-04-30 10:59:32 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、绘制总体图形

importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.axes_grid1.inset_locatorimportinset_axesfrommatplotlib.patchesimportConnectionPatchimportpandasaspdMAX_EPISODES=300x_axis_data=[]forlinrange(MAX_EPISODES):x_axis_data.append(l)fig,ax=plt.subplots(1,1)data1=pd.read_csv('./result/test_reward.csv')['test_reward'].values.tolist()[:MAX_EPISODES]data2=pd.read_csv('./result/test_reward_att.csv')['test_reward_att'].values.tolist()[:MAX_EPISODES]ax.plot(data1,label="noatt")ax.plot(data2,label="att")ax.legend()

如何使用matplotlib库实现图形局部数据放大显示

二、插入局部子坐标系

#插入子坐标系axins=inset_axes(ax,width="40%",height="20%",loc=3,bbox_to_anchor=(0.3,0.1,2,2),bbox_transform=ax.transAxes)#在子坐标系中放入数据axins.plot(data1)axins.plot(data2)

如何使用matplotlib库实现图形局部数据放大显示

三、限制局部子坐标系数据范围

#设置放大区间zone_left=150zone_right=170#坐标轴的扩展比例(根据实际数据调整)x_ratio=0#x轴显示范围的扩展比例y_ratio=0.05#y轴显示范围的扩展比例#X轴的显示范围xlim0=x_axis_data[zone_left]-(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratioxlim1=x_axis_data[zone_right]+(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratio#Y轴的显示范围y=np.hstack((data1[zone_left:zone_right],data2[zone_left:zone_right]))ylim0=np.min(y)-(np.max(y)-np.min(y))*y_ratioylim1=np.max(y)+(np.max(y)-np.min(y))*y_ratio#调整子坐标系的显示范围axins.set_xlim(xlim0,xlim1)axins.set_ylim(ylim0,ylim1)

(-198439.93763, -134649.56637000002)

如何使用matplotlib库实现图形局部数据放大显示

四、加上方框和连接线

#原图中画方框tx0=xlim0tx1=xlim1ty0=ylim0ty1=ylim1sx=[tx0,tx1,tx1,tx0,tx0]sy=[ty0,ty0,ty1,ty1,ty0]ax.plot(sx,sy,"blue")#画两条线#第一条线xy=(xlim0,ylim0)xy2=(xlim0,ylim1)"""xy为主图上坐标,xy2为子坐标系上坐标,axins为子坐标系,ax为主坐标系。"""con=ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)#第二条线xy=(xlim1,ylim0)xy2=(xlim1,ylim1)con=ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)

如何使用matplotlib库实现图形局部数据放大显示

五、总体实现代码

importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.axes_grid1.inset_locatorimportinset_axesfrommatplotlib.patchesimportConnectionPatchimportpandasaspdMAX_EPISODES=300x_axis_data=[]forlinrange(MAX_EPISODES):x_axis_data.append(l)fig,ax=plt.subplots(1,1)data1=pd.read_csv('./result/test_reward.csv')['test_reward'].values.tolist()[:MAX_EPISODES]data2=pd.read_csv('./result/test_reward_att.csv')['test_reward_att'].values.tolist()[:MAX_EPISODES]ax.plot(data1,label="noatt")ax.plot(data2,label="att")ax.legend()#插入子坐标系axins=inset_axes(ax,width="20%",height="20%",loc=3,bbox_to_anchor=(0.3,0.1,2,2),bbox_transform=ax.transAxes)#在子坐标系中放入数据axins.plot(data1)axins.plot(data2)#设置放大区间zone_left=150zone_right=170#坐标轴的扩展比例(根据实际数据调整)x_ratio=0#x轴显示范围的扩展比例y_ratio=0.05#y轴显示范围的扩展比例#X轴的显示范围xlim0=x_axis_data[zone_left]-(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratioxlim1=x_axis_data[zone_right]+(x_axis_data[zone_right]-x_axis_data[zone_left])*x_ratio#Y轴的显示范围y=np.hstack((data1[zone_left:zone_right],data2[zone_left:zone_right]))ylim0=np.min(y)-(np.max(y)-np.min(y))*y_ratioylim1=np.max(y)+(np.max(y)-np.min(y))*y_ratio#调整子坐标系的显示范围axins.set_xlim(xlim0,xlim1)axins.set_ylim(ylim0,ylim1)#原图中画方框tx0=xlim0tx1=xlim1ty0=ylim0ty1=ylim1sx=[tx0,tx1,tx1,tx0,tx0]sy=[ty0,ty0,ty1,ty1,ty0]ax.plot(sx,sy,"blue")#画两条线#第一条线xy=(xlim0,ylim0)xy2=(xlim0,ylim1)"""xy为主图上坐标,xy2为子坐标系上坐标,axins为子坐标系,ax为主坐标系。"""con=ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)#第二条线xy=(xlim1,ylim0)xy2=(xlim1,ylim1)con=ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)

如何使用matplotlib库实现图形局部数据放大显示

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何使用matplotlib库实现图形局部数据放大显示的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java如何实现经典拳皇误闯冒险岛游戏下一篇:

19 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18