R绘图案例|基于分面的折线图绘制

简介: R绘图案例|基于分面的折线图绘制

简介

最近撰写论文中需要通过可视化说明不同模型(Method)的结果在三种评价指标(MAE、MAPE、RMSE)下的估计性能。并且这个估计结果是预测未来 1-7 天的预测值。

最终,小编选择使用折线来刻画,并按照评价指标进行分面。每个分面中用不同的颜色和形状表示不同的方法。具体图如下:



注意:本文主要分享这幅图的绘制过程,将提供示例数据(经过处理)和代码,大家可以根据自己科研需求进行改变。在公众号后台回复[分面折线图]即可免费获取。

数据处理

加载所需 R 包,并导入数据,修改列名。此时,数据预览如下:

# library
library(ggplot2)
library(viridis) #配色所需
library(tidyverse)
dat = read.csv("data_city.csv",header = F) #导入数据
colnames(dat) = c("Method","Cri",1:7) #修改列名
head(dat)



使用 Tidyverse 包中的 pivot_longer() 将宽表转化为长表,具体教程可见:《R语言教程》。

之后,加入两列数据:

1.三种指标数据(Cri);

2.不同方法(Method)并将其转化为因子形式。

数据预览如下:

data = dat[,3:9] %>% pivot_longer(1:7,
                      names_to = "time",
                      values_to = "value",
                      names_transform = list(time = as.integer)
)
data["Cri"] = rep(rep(c("RMSE","MAE","MAPE"),each = 7),5)
data["Method"] = rep(c("FNN","RNN","LSTM","Bi-LSTM","ENDC-LSTM"),each= 21)
factor(data["Method"], levels = c("FNN", "RNN", "LSTM", "Bi-LSTM", "ENDC-LSTM"))
head(data)



这里小编直接用基础包的写法了,当然读者也可以试试 Tidyverse 的语法~

绘图

根据上述数据进行可视化,其中将 color 和 shape 都you Method 决定。并加入两个几何对象(geom_point()geom_line())。最后,利用 facet_wrap() 按照 Cri 进行分面。结果如下:

ggplot(data, aes(x=time, y=value, color = Method,shape = Method)) + 
  geom_point() +
  geom_line() + 
  facet_wrap(vars(Cri), nrow =1,strip.position = "top")


最后,对图形进行稍微的修饰。修改了图形主题,坐标轴,配色等。

ggplot(data, aes(x=time, y=value, color = Method,shape = Method)) + 
  geom_point() +
  geom_line() + 
  facet_wrap(vars(Cri), nrow =1,strip.position = "top") 
ggplot(data, aes(x=time, y=value, color = Method,shape = Method)) + 
  geom_point() +
  geom_line() + 
  scale_color_viridis(discrete = T,option = "G", direction = -1) +
  scale_x_continuous(expand = c(0.1,0.1),
                     breaks = c(1:7),
                     limits = c(1,7)) +
  facet_wrap(vars(Cri), nrow =1,strip.position = "top") +
  theme_bw() +  
  theme(panel.grid = element_blank(), legend.position="right") +
  xlab("Time") +
  ylab("Value")


注意:如果读者想掌握 ggplot2 包的基础语法,可以去小编的 B 站【庄闪闪】搜索可视化教程。其他相关推文如:常用 7 大类图形可视化汇总——ggplot2包可视化设计没灵感?快来看看这些宝藏学习网站吧~

小编有话说

  1. 分面内有很多细节可以修改(修改颜色,字体大小,位置等),如果对此感兴趣,可阅读以前的推文:如何在分面中添加数学表达式标签?ggplot 分面的细节调整汇总R可视乎|分面一页多图
  2. 读者可以根据本文的原始数据和源代码进行修改。在公众号后台回复[分面折线图]即可免费获取,当然也欢迎大家帮我宣传下公众号~


完整代码

# library
library(ggplot2)
library(viridis)
library(tidyverse)
# data reprocess
dat = read.csv("data_city.csv",header = F)
colnames(dat) = c("Method","Cri",1:7)
data = dat[,3:9] %>% pivot_longer(1:7,
                      names_to = "time",
                      values_to = "value",
                      names_transform = list(time = as.integer)
                      )
data["Cri"] = rep(rep(c("RMSE","MAE","MAPE"),each = 7),5)
data["Method"] = rep(c("FNN","RNN","LSTM","Bi-LSTM","ENDC-LSTM"),each= 21)
factor(data["Method"], levels = c("FNN", "RNN", "LSTM", "Bi-LSTM", "ENDC-LSTM"))
head(data)
# plot
ggplot(data, aes(x=time, y=value, color = Method,shape = Method)) + 
  geom_point() +
  geom_line() + 
  scale_color_viridis(discrete = T,option = "G", direction = -1) +
  scale_x_continuous(expand = c(0.1,0.1),
                     breaks = c(1:7),
                     limits = c(1,7)) +
  facet_wrap(vars(Cri), nrow =1,strip.position = "top") +
  theme_bw() +  
  theme(panel.grid = element_blank(), legend.position="right") +
  xlab("Time") +
  ylab("Value")
目录
相关文章
|
2月前
|
数据可视化 Python
Matplotlab可视化学习笔记(二):如何绘制柱状图
使用Matplotlib库在Python中绘制柱状图的教程,包括基本的柱状图绘制和多条柱状图的绘制方法。
32 1
Matplotlab可视化学习笔记(二):如何绘制柱状图
|
2月前
|
数据可视化 Python
Matplotlab可视化学习笔记(一):如何绘制折线图
这篇博客介绍了如何使用Matplotlib库在Python中绘制折线图,包括常用颜色和线型、绘制多条折线图的方法、设置双y轴的技巧,以及如何保存和显示图表。
32 0
|
3月前
|
图形学
利用Graphics画出一幅图表绘制折线图
("某工厂某产品年度销售额图表",this.Font, Brushes.Black, new Point(420,14)); pen.Dispose();
25 0
|
7月前
|
NoSQL 数据库 Python
PyQt学习(二)-----图形的建立(柱状图,折线图,堆叠柱状图,饼图)
PyQt学习(二)-----图形的建立(柱状图,折线图,堆叠柱状图,饼图)
118 1
|
6月前
|
数据可视化 开发者 Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-1
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
6月前
|
Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
7月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(下)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
486 0
|
7月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(上)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
739 0
|
7月前
|
存储 数据可视化
使用 plotly 绘制旭日图
使用 plotly 绘制旭日图
326 0
|
编解码 前端开发 JavaScript
Matplotlib使用和绘制二维图表
Matplotlib使用和绘制二维图表
129 0