有两个数据框df1和df2均含有Gas、Date、Flux、Hybrid和Nrate等指标两个数据框的行数差距很大现利用dplyr和ggplot做df1以Date为横坐标Flux为纵坐标Gas为分面颜色为Hybrid的折线图在每个分面图右上角四分之一的地方添加对应的小折线图小折线图使用df2的数据做一样的折线图
代码如下:
library(dplyr)
library(ggplot2)
# 生成样本数据
set.seed(123)
df1 <- data.frame(
Gas = rep(c("Gas1", "Gas2", "Gas3"), each = 100),
Date = rep(seq(as.Date("2021-01-01"), by = "day", length.out = 100), times = 3),
Flux = rnorm(300, mean = 10, sd = 2),
Hybrid = rep(c("Hybrid1", "Hybrid2"), each = 150),
Nrate = rpois(300, lambda = 5)
)
df2 <- data.frame(
Gas = rep(c("Gas1", "Gas2", "Gas3"), each = 20),
Date = rep(seq(as.Date("2021-01-01"), by = "day", length.out = 20), times = 3),
Flux = rnorm(60, mean = 8, sd = 1),
Hybrid = rep(c("Hybrid1", "Hybrid2"), each = 30),
Nrate = rpois(60, lambda = 3)
)
# df1折线图
df1_plot <- df1 %>%
ggplot(aes(x = Date, y = Flux, color = Hybrid)) +
geom_line() +
facet_wrap(~ Gas, ncol = 3) +
theme(legend.position = "none")
# df2折线图
df2_plot <- df2 %>%
ggplot(aes(x = Date, y = Flux, color = Hybrid)) +
geom_line() +
theme_void() +
theme(legend.position = "none")
# 合并图形
df1_plot +
annotation_custom(ggplotGrob(df2_plot), xmin = as.Date("2021-06-30"), xmax = as.Date("2021-07-01"), ymin = 12, ymax = 14)
解释一下代码:
- 首先生成了样本数据,其中df1有300行,df2有60行,均含有Gas、Date、Flux、Hybrid和Nrate等指标;
- 接下来对df1进行处理,使用ggplot绘制折线图,以Date为横坐标,Flux为纵坐标,Gas为分面,颜色为Hybrid;
- 对df2进行处理,使用ggplot绘制相同的折线图,但是使用了theme_void()将背景设置为透明;
- 最后使用annotation_custom()函数将df2的图形添加到df1的图形上,其中xmin和xmax控制小图形的横坐标范围,ymin和ymax控制小图形的纵坐标范围,这里设置为右上角的位置。
原文地址: http://www.cveoy.top/t/topic/6aY 著作权归作者所有。请勿转载和采集!