【Python】Matplotlib局部放大图画法

【Python】Matplotlib局部放大图画法

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from matplotlib.patches import ConnectionPatch

x = np.arange(1,len(LSTM_true)+1)

# 画出测试集的实际结果和预测结果
fig, ax = plt.subplots(figsize=(30, 12))
ax.plot(x, LSTM_true,color='black', label='true', alpha=0.7)
ax.plot(x, LSTM_predict,color='#848484', label='LSTM', alpha=0.7)
ax.plot(x, MLP_predict, color='#FF774A',label='MLP', alpha=0.7)
ax.plot(x, RNN_predict,  color='#575B20',label='RNN', alpha=0.7)
ax.plot(x, TCN_predict,label='TCN', alpha=0.7)
ax.plot(x, XGBoost_predict,label='XGBoost', alpha=0.7)
ax.plot(x, CNN_predict,label='CNN', alpha=0.7)
ax.plot(x, Transformer_predict,label='Transformer', alpha=0.7)

plt.legend(loc='best')

# 嵌入局部放大图的坐标系 
#ax为父坐标系,后面四个参数同样是(x0, y0, width, height),
axins = ax.inset_axes((0.2, -0.5, 0.4, 0.3))

#在子坐标系中绘制原始数据
axins.plot(x, LSTM_true,color='black', label='true', alpha=0.7)
axins.plot(x, LSTM_predict,color='#848484', label='LSTM', alpha=0.7)
axins.plot(x, MLP_predict, color='#FF774A',label='MLP', alpha=0.7)
axins.plot(x, RNN_predict,  color='#575B20',label='RNN', alpha=0.7)
axins.plot(x, TCN_predict,label='TCN', alpha=0.7)
axins.plot(x, XGBoost_predict,label='XGBoost', alpha=0.7)
axins.plot(x, CNN_predict,label='CNN', alpha=0.7)
axins.plot(x, Transformer_predict,label='Transformer', alpha=0.7)

# 设置放大区间,调整子坐标系的显示范围
# 设置放大区间
zone_left = 100
zone_right = 130

# 坐标轴的扩展比例(根据实际数据调整)
x_ratio = 0  # x轴显示范围的扩展比例
y_ratio = 0.05  # y轴显示范围的扩展比例

# X轴的显示范围
xlim0 = x[zone_left]-(x[zone_right]-x[zone_left])*x_ratio
xlim1 = x[zone_right]+(x[zone_right]-x[zone_left])*x_ratio

# Y轴的显示范围
y = np.hstack((LSTM_true[zone_left:zone_right], LSTM_predict[zone_left:zone_right],
               MLP_predict[zone_left:zone_right],RNN_predict[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,"black")

# 画两条线
xy = (xlim0,ylim0)
xy2 = (xlim0,ylim1)
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)

plt.savefig(r'C:\Users\ZHUANG\Desktop\pjm_rto_load.png')


在这里插入图片描述
详细内容看https://juejin.cn/post/6844904183548608520

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汐ya~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值