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月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(上)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
65 0
|
2月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(下)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
110 0
|
3月前
|
数据可视化 Python
使用pygal库绘制直方图、XY线图和饼状图的技术指南
使用pygal库绘制直方图、XY线图和饼状图的技术指南
20 0
|
7月前
|
编解码 前端开发 JavaScript
Matplotlib使用和绘制二维图表
Matplotlib使用和绘制二维图表
63 0
|
10月前
|
数据挖掘
ggplot2| 绘制KEGG气泡图
ggplot2| 绘制KEGG气泡图
197 0
|
11月前
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10830 0
|
数据可视化 数据挖掘 定位技术
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形(一)
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形
286 0
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形(一)
|
定位技术
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形(二)
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形
133 0
pyecharts绘制条形图、饼图、散点图、词云图、地图等常用图形(二)
|
API Python
Matplotlib常见绘图绘制(折线图、散点图、柱状图、直方图、饼图)
Matplotlib常见绘图绘制(折线图、散点图、柱状图、直方图、饼图)
286 0
Matplotlib常见绘图绘制(折线图、散点图、柱状图、直方图、饼图)
|
数据处理
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
224 0
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)