导入工具包

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

配置matplotlib字体

config = {"font.family": "SimSun","font.size": 14,"mathtext.fontset": "stix"}
mpl.rcParams.update(config)

导入数据

x_data = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
y_data_1 = [8.179,7.345,7.029,6.751,6.611,6.507,6.319,6.196,6.086,6.006,5.923,5.81,5.76,5.705,5.644,5.583,5.523,5.436,5.485,5.378,5.343,5.309,5.257,]
y_data_2 = [7.191,6.637,6.292,6.112,6.094,5.74,5.709,5.667,5.583,5.506,5.41,5.307,5.239,5.303,5.282,5.11,5.075,5.083,4.971,4.976,4.993,4.963,5.138]

创建画布

fig, ax = plt.subplots(1, 1)

绘图

ax.plot(x_data, y_data_1, linestyle=":",color="r", linewidth=1.5,marker="o",markersize=5,markeredgecolor="black",markerfacecolor="C3")ax.plot(x_data, y_data_2, linestyle=":",color="g", linewidth=1.5,marker="o",markersize=5,markeredgecolor="black",markerfacecolor="C2")
ax.legend(labels=["训练集", "测试集"], ncol=2, loc="lower left")
plt.xlabel("训练轮次", fontsize=14, fontdict={"family": "SimSun", "size": 14})
plt.ylabel("损失", fontsize=14, fontdict={"family": "SimSun", "size": 14})

在大图上绘制要放大的区域

sx = [20, 24, 24, 20, 20]
sy = [4.9, 4.9, 5.5, 5.5, 4.9]
plt.plot(sx, sy, lw=2, c="black")

插入子坐标并绘图

axins = inset_axes(ax, width="40%", height="30%", loc='lower left',bbox_to_anchor=(0.4, 0.6, 1, 1),bbox_transform=ax.transAxes)
axins.plot(x_data, y_data_1, linestyle=":",color="r", linewidth=1.5,marker="o",markersize=5,markeredgecolor="black",markerfacecolor="C3")
axins.plot(x_data, y_data_2, linestyle=":",color="g", linewidth=1.5,marker="o",markersize=5,markeredgecolor="black",markerfacecolor="C2")
axins.set_xlim(20, 24)
axins.set_ylim(4.9, 5.5)

给极值处添加标签

axins.annotate("训练集上的最小损失5.257",ha="center",va="bottom",xytext=(20, 5.2),xy=(24, 5.257),arrowprops={'facecolor': 'red', 'shrink': 0.05}
)
axins.annotate("测试集上的最小损失4.963",ha="center",va="bottom",xytext=(20, 5.05),xy=(23, 4.963),arrowprops={'facecolor': 'red', 'shrink': 0.05}
)

绘制放大图与原图像之间的连线

xy = (20, 5.5)
xy2 = (20, 4.9)
con = ConnectionPatch(xyA=xy2, xyB=xy, coordsA="data", coordsB="data",axesA=axins, axesB=ax)
axins.add_artist(con)xy = (24, 5.5)
xy2 = (24, 4.9)
con = ConnectionPatch(xyA=xy2, xyB=xy, coordsA="data", coordsB="data",axesA=axins, axesB=ax)
axins.add_artist(con)

保存图像

plt.savefig("loss.PNG", dpi=300, bbox_inches="tight")
plt.show()

matplotlib绘制局部放大图相关推荐

  1. matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等

    matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...

  2. 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点

    使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点.最大最小距离点 1. 效果图 2. 源码 2.1 原始数据--xq.txt 2.2 源码 参考 这篇博客将演示如何 ...

  3. Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点

    Matplotlib绘制象限图--支持中文.箭头.自定义轴线交点 1. 效果图 2. 原理 2.1 绘制象限图步骤 2.1 添加文字到图表 3. 源码 参考 这篇博客将介绍如何使用matplotlib ...

  4. python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图

    在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...

  5. python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot)

    python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) 目录 python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) #导入 ...

  6. Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)

    Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background) 目录

  7. Python使用matplotlib绘制分组对比柱状图(bar plot)可视化时汉语(中文)标签显示成了框框□□、什么情况、我们有解决方案

    Python使用matplotlib绘制分组对比柱状图可视化时(bar plot)汉语(中文)标签显示成了框框□□.什么情况.我们有解决方案 目录

  8. Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)

    Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况) #仿真数据 import pandas as pd import numpy a ...

  9. Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图、垂直条形图、分组条形图、堆叠条形图

    Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图.垂直条形图.分组条形图.堆叠条形图 目录

最新文章

  1. 2019数据安装勾选_宝象课堂丨如何正确安装SOLIDWORKS 2019?
  2. 三大运营商借5G消息围攻微信,就问张小龙怕不怕
  3. Java 中 StringBuilder 在高性能用法总结
  4. 13亿参数,无标注预训练实现SOTA:Facebook提出自监督CV新模型
  5. Linux后台运行java的jar包,java基础面试笔试题
  6. 2018年11月27日 分类与集合
  7. PM2怎么保持Node应用程序永久活动?
  8. cent os7 安装zookeeper3.6.0
  9. leetcode 两个排序的中位数 python
  10. java树遍历算法_Java递归算法实现目录树的遍历
  11. 数字图像处理笔记⑧——纹理分析
  12. 对计算机选购的注意事项,购买电脑的一些注意事项
  13. 综治应急指挥中心建设方案
  14. 【2018亚太数据中心峰会】黄超:从供到需-中国IDC产业发展的环境分析
  15. 贪心——国际象棋锦标赛
  16. ffmpeg安装教程(windows版)
  17. win10家庭版怎么删除多余的用户
  18. python string类型的英文句子逆序输出
  19. GNS3 思科(Cisco)PIX虚拟防火墙简单配置
  20. 时间复杂度分析:递归算法

热门文章

  1. 嘉立创板子形状——投板笔记
  2. 工作汇报怎么写?学会这几招,教你快速升职加薪!
  3. 电磁波是怎么传播的?
  4. win10 触摸屏测试软件,Win10 测试版 18970 推送,微软着手改善触摸操作体验
  5. 使用shiro进行系统身份验证-权限控制,登录界面乱跳
  6. 仿真软件matlab中有simunik,Simcenter Amesim 2019.1与Matlab/simulink联合仿真
  7. python xlwings 安装_xlwings runpython安装失败
  8. 1分钟学会在Java中将PSD转换为PNG等图片格式,你可能差一个它
  9. 【NOIP】合唱队形
  10. Bean named 'rateBoardService' is expected to be of but was actually of type 'com.sun.proxy.$Proxy69'