论文中的误差图绘制(图中图)
如何绘制论文中好看又高级的误差图,本文旨在解决如下类似的图的绘制
准备工具:Python
参考:https://zhuanlan.zhihu.com/p/147274030
参考文章
首先是引入需要的库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import inset_axes # 用于创建具有给定宽度和高度的插入轴
from matplotlib.patches import ConnectionPatch #
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 还有仿宋、楷体、微软雅黑:'FangSong', 'KaiTi', 'Microsoft YaHei'
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
读取数据
# Data read data1 = pd.read_csv('data1.csv', header= None) # 防止第一行被读作 header
data2 = pd.read_csv('data2.csv', index_col = 0) # 设置第一列为 index
关于读取数据的具体操作详解请见https://blog.csdn.net/qq_37207042/article/details/117087769
绘制主图
t = range(800) # 绘制时间轴长度为 800plt.rcParams['figure.figsize'] = (14.0, 6.0) # 图片大小设置为 14英寸,6英寸fig, ax = plt.subplots() # fig is figure object, and ax is axes objectLW = 0.8 # 线宽ca = plt.gca() # gca means "get current axis"ca.spines['right'].set_linestyle('--') # 右侧轴的设置线形 ca.spines['right'].set_linewidth(1) # 右侧轴的设置线宽ca.spines['right'].set_color('gray') # 右侧轴的设置线的颜色ca.spines['top'].set_linestyle('--') # 顶部轴的ca.spines['top'].set_linewidth(1) ca.spines['top'].set_color('gray')ca.spines['left'].set_linewidth(1.5) # 左侧轴ca.spines['bottom'].set_linewidth(1.5) # 底部轴ax.plot(t, data1.iloc[0,0:800], color = 'red', linewidth = LW , linestyle = '-' , label = '原始数据') # 绘制颜色为红色,x轴为t,y轴为 data1.iloc[0,0:800] 的线宽为LW图,标签为原始数据。ax.plot(t, data2[0,0:800], color = 'darkgreen', linewidth = LW , linestyle = '-' , label = '传统模型')ax.plot(t, data3.iloc[0,0:800], color = 'darkred', linewidth = LW , linestyle = '-' , label = 'RBF')ax.plot(t, data4.iloc[0,0:800], color = 'darkcyan', linewidth = LW , linestyle = '-' , label = 'GRNN')ax.plot(t, data5.iloc[0:800,0], color = 'black', linewidth = LW , linestyle = '-' , label = 'GRU') ax.plot(t, data6.iloc[0:800,0], color = 'royalblue', linewidth = LW , linestyle = '-' , label = 'LSTM')ax.set_xlabel('时间/s') # 设置 x 轴标签ax.set_ylabel('残差') # 设置 y 轴标签ax.set_title('残差对比图') # 设置题目ax.set_xlim((0,800)) # 设置 x 轴的范围ax.set_ylim((-0.07,0.12)) # 设置 y 轴范围ax.legend(loc = 'upper left', shadow = True, framealpha = 1, fontsize = 10, edgecolor = 'black') # 加入legend 位置为左上,带阴影,框架透明度为1,字体大小为10,边框颜色为黑。
绘制子图
插入子图应用 ax.inset_axes((a, b, c, d))
,其中a, b
分别表示子图在主图 x 轴与 y 轴的起始位置(数值从0-1, 表示比例),c, d
表示子图占主图的 x, y 轴的长度比例。
axins = ax.inset_axes((0.45, 0.58, 0.45, 0.4)) # 插入子图的轴zone_left = 550 # 子图的 x 轴左界zone_right = 650 # 子图的 x 轴右界t_ins = range(zone_left, zone_right) # 子图的 x 时间轴# 绘制子图axins.plot(t_ins, data1[0, zone_left : zone_right], color = 'darkcyan', linewidth = LW , linestyle = '-' , label = 'GRNN')axins.plot(t_ins, data2.iloc[0, zone_left : zone_right], color = 'darkred', linewidth = LW , linestyle = '-' , label = 'RBF')axins.plot(t_ins, data3.iloc[0, zone_left : zone_right], color = 'darkgreen', linewidth = LW , linestyle = '-' , label = '传统模型')axins.plot(t_ins, data4.iloc[0, zone_left : zone_right], color = 'red', linewidth = LW , linestyle = '-' , label = '原始数据')axins.plot(t_ins, data5.iloc[zone_left : zone_right, 0], color = 'black', linewidth = LW , linestyle = '-' , label = 'GRU')axins.plot(t_ins, data6.iloc[zone_left : zone_right, 0], color = 'royalblue', linewidth = LW , linestyle = '-' , label = 'LSTM')# 设置子图 x 轴与 y 轴区间axins.set_xlim((zone_left, zone_right))axins.set_ylim((-0.02,0.02))
主子图连接
主图中绘制方框就用正常的直线连接。
子图与主图的连接用 ConnectionPatch(xyA, xyB, coordsA="data", coordsB="data", axesA=axins, axesB=ax)
,这里xyA是子图里面的点(按子图的坐标输入),xyB是主图里面的点,coordsA和coordsB默认值"data",也不用改,然后就是axesA为子图轴对象,axesB为主图轴对象。
函数参考https://matplotlib.org/stable/api/_as_gen/matplotlib.patches.ConnectionPatch.html
axins.add_artist(connect_AB1)
用于添加连线。
# 在主图中绘制方框
ax.plot([zone_left, zone_left, zone_right, zone_right, zone_left], [-0.02, 0.02, 0.02, -0.02, -0.02], linestyle = '--', linewidth = 1, color = "black")
# 连接主图的方框与子图
connect_AB1 = ConnectionPatch((zone_left, -0.02),(zone_left, 0.02), coordsA="data",coordsB="data",axesA=axins,axesB=ax)
axins.add_artist(connect_AB1)
connect_AB2 = ConnectionPatch((zone_right, -0.02),(zone_right, 0.02), coordsA="data",coordsB="data",axesA=axins,axesB=ax)
axins.add_artist(connect_AB2)
# 保存图像 分辨率 dpi = 600 一般 600 已经很清楚了
plt.savefig('error.jpg', dpi = 600)
主图与子图之间还有另一种连接方式:
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
mark_inset((parent_axes, inset_axes, loc1 = {1, 2, 3, 4}, loc2 = {1, 2, 3, 4}, alpha=0.5,fc='none',ec='r',ls='-.')
mark_inset意为插入图的标记
其中,parent_axes,inset_axes
分别代表主图与子图的轴,loc1,loc2
表示用于连接主图与子图轴区域的角,fc
即facecolor
,ec
表示 edgecolor
,其他参数与线状参数类似。
函数参考:https://matplotlib.org/stable/api/_as_gen/mpl_toolkits.axes_grid1.inset_locator.mark_inset.html#mpl_toolkits.axes_grid1.inset_locator.mark_inset
线型:
基础颜色:
标记:
位置参数:
进阶颜色:
论文中的误差图绘制(图中图)相关推荐
- python如何画出多个独立的图片_如何使用python语言中的可视化工具绘制多个图
在使用的matplotlib第三方包的过程中,可以在画布上绘制一个图形之外,还可以绘制多个图形,根据分布来构成图形.下面利用具体的实例说明如何实现,操作如下: 工具/原料 python 截图工具 方法 ...
- Tree Map:树状图——绘制COVID-19阵列图
Tree Map树状图, 可视化 饼状图用于表示每个数据在总体中的占比, 但当数据个体数量较多,规模差异较大时, 饼状图无法很好展现. 树状图是一种通过空间填充占比展示数据比率的可视化方式.能够很好的 ...
- UML图绘制(三)-----活动图的画法 一
一.什么是活动图 活动图(activity diagram)是阐明了业务用例实现的工作流程. 业务工作流程说明了业务为向所服务的业务主角提供其所需要的价值而必须完成的工作, 业务用例由一系列活动组成, ...
- 在Markdown中使用Mermaid来绘制用户旅程图
1. 定义 2. 基本语法 journeytitle My working daysection Go to workMake tea: 5: MeGo upstairs: 3: MeDo work: ...
- python中的散点图代码-绘制python中的线和散点图
我目前正在从Coursera( https://www.coursera.org/learn/ml-foundations/lecture/6wD6H/visualizing-predictions- ...
- visio 模板_盒图模板一键套用,便捷绘制精美盒图图表
盒图,也被称作为N-S图,是一种取代传统流程图描述方式的分析工具,常用于编程过程中的需求分析阶段.与传统流程图相比,盒图的优越性在于去除了流程线可以更为直观地表示程序的结构,但也同时有着不易更改和占地 ...
- Graphpad Prism 9绘制子列图与柱状图
今天给大家分享使用Graphpad Prism绘制子列图与柱状图. 1 子列图绘制 子列图中每个子列中的数据具有相关性,上图是官网给出的图片显示每组有三只大鼠,每只大鼠中测量了四次.每个子列可以绘制为 ...
- 思维导图的优缺点与绘制思维导图方法
思维导图是围绕中心主题进行搭建的框架结构,里面的内容是所拓展的长尾关键词,通过对思维进行发散,达到全方位解析的效果,从而可以很好的进行使用,但是每一件东西都有优缺点,下面来看看吧. 思维导图的优点: ...
- Python绘制K线图之可视化神器pyecharts
目录 K线图 概念 用处 K线图系列模板 最简单的K线图绘制 K线图鼠标缩放 有刻度标签的K线图 K线图鼠标无缩放 大量数据K线图绘制(X轴鼠标可移动) 每文一语 K线图 概念 股市及期货市bai场中 ...
- 4米乘以12米CAD图_设备时序图的绘制方法
每日一省:你觉得工作上还有哪些需要改进的地方? 在方案说明书中常用C/T来作为设备性能参数,说明设备的生产能力.C/T是指设备完成一个完整动作周期所需要的时间.设备的理论C/T是通过时序图的分析得到的 ...
最新文章
- P1629邮递员送信与P1342请柬与P1821银牛派队研制联合胜利
- Markdown基本语法【转】
- matlab中的@函数
- sata接口_解决主板SATA接口不足:乐扩PCIe2.0转8口SATA3/6G扩展卡
- 空间波(space wave)
- IDEA 如何打jar包
- 分布式架构在云计算平台中的应用及优缺点
- 一份毕业指南给需要的人
- Android将网页转为pDf,UrlToPDF 输入网址直接将网页转存为 PDF 档(Android)
- 插件制作教程 php,HYBBS插件开发教程 (简单插件) 初识篇
- VS2017 C++解决方案和项目目录文件夹
- 云服务器下行_阿里云ECS服务器下行带宽和上行带宽详解及选择
- 调用百度API(一)——百度翻译
- 基于软路由连接上网的相关配置
- Vue生命周期中对mounted、beforeUpdate、updated的理解
- 魔兽世界场景组织浅析
- Kafka对Java程序员有多重要?连阿里都再用它处理亿万级数据统计
- boss显示服务器,阴阳师:寝肥BOSS开启服务器却崩了,官方补偿让人难以接受
- 新疆独库公路,一生一定要走一次!
- 使用pysam读取DNA序列