網站首頁 編程語言 正文
一、繪制總體圖形
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.inset_locator import inset_axes from matplotlib.patches import ConnectionPatch import pandas as pd MAX_EPISODES = 300 x_axis_data = [] for l in range(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="no att") ax.plot(data2,label = "att") ax.legend()
二、插入局部子坐標系
#插入子坐標系 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)
三、限制局部子坐標系數據范圍
#設置放大區間 zone_left = 150 zone_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_ratio xlim1 = 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_ratio ylim1 = 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)
四、加上方框和連接線
# 原圖中畫方框 tx0 = xlim0 tx1 = xlim1 ty0 = ylim0 ty1 = ylim1 sx = [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)
五、總體實現代碼
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.inset_locator import inset_axes from matplotlib.patches import ConnectionPatch import pandas as pd MAX_EPISODES = 300 x_axis_data = [] for l in range(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="no att") 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 = 150 zone_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_ratio xlim1 = 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_ratio ylim1 = np.max(y)+(np.max(y)-np.min(y))*y_ratio # 調整子坐標系的顯示范圍 axins.set_xlim(xlim0, xlim1) axins.set_ylim(ylim0, ylim1) # 原圖中畫方框 tx0 = xlim0 tx1 = xlim1 ty0 = ylim0 ty1 = ylim1 sx = [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)
原文鏈接:https://blog.csdn.net/qq_43790749/article/details/122969620
相關推薦
- 2023-07-04 JUC阻塞隊列BlockingQueue---LinkedBlockingQueue
- 2022-06-23 分布式醫療掛號系統整合Gateway網關解決跨域問題_其它綜合
- 2022-06-14 SQL?SERVER常用的日期與時間查詢總結_MsSql
- 2023-01-19 詳解Go語言實現線性查找算法和二分查找算法_Golang
- 2022-04-08 python如何去除異常值和缺失值的插值_python
- 2022-08-25 C語言詳細分析結構體的內存對齊規則_C 語言
- 2022-06-07 FreeRTOS實時操作系統移植操作示例指南_操作系統
- 2022-04-16 Android中RecyclerView實現商品分類功能_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支