如何选择性地选择 facet_wrap() 组合
How to selectively choose facet_wrap() combinations
我有一个包含 20 个湖泊水质信息的数据框。对于每个湖泊,每次访问都会多次测量 ph 值和溶解氧水平,并将平均值和最大值记录在数据框中。使用两种不同的方法分别计算溶解氧和 ph 值的模型推导估计值。我想用 4 个散点图面板绘制一个图,描述每个估计“方法”和水质参数的观测值和估计值之间的关系。我想避免使用像 ggarrange()
这样的方法,因为我有一个我正在使用的自定义主题,这需要很多额外的工作。我最好的想法是在 ggplot()
中使用 facet_wrap()
,但这会产生不同变量的所有可能组合,而我只对 4 种特定组合感兴趣。
示例:
library(dplyr)
library(ggplot)
#creating a dataframe
df <- data.frame(
method = c(rep("quad", 10), rep("linear",10)),
date = c(rep("2021-11-17", 10),
rep("2022-02-27", 5),
rep("2021-11-20",5)),
ph_est = rnorm(20, 3),
disso_est = rnorm(20, 1),
mean_ph = rnorm(20, 0),
max_ph = rnorm(20, 2),
mean_disso = rnorm(20, 5),
max_disso = rnorm(20, 10)
)
df$ID <- seq.int(nrow(df))
#pivoting longer in order to plot
df_l <- pivot_longer(df,
cols = c("ph_est", "disso_est"),
names_to = "samp_pars",
values_to = "samp_vals")
df_l <- pivot_longer(df_l, cols = c("mean_ph", "max_ph", "mean_disso", "max_disso"),
names_to = "est_pars",
values_to = "est_vals")
#Attempting the plot
ggplot(df_l, aes(x = est_vals, y = samp_vals)) +
geom_point() +
facet_wrap(~ method + samp_pars + est_pars, scales = "free")
输出很接近,但我只想要 4 个面板:
1."quad" 估计 ph 与 mean ph[=17 的方法=]
2."quad" estimated DO 与 mean DO[=17 的方法=]
3.linear" estimated ph 与 max ph[=17 的方法=]
4.linear" estimated DO 与 mean DO[=17 的方法=]
有什么方法可以重新排列我的数据框来完成这项工作吗?还是我需要以不同的方式处理这整件事?
如有任何帮助,我们将不胜感激,并提前致谢!
您可以过滤数据框以仅保留 4 个绘图所需的组合。
在 ggplot
之前添加以下内容:
df_l <- filter(df_l,
(method=="quad" & samp_pars=="ph_est" & est_pars=="mean_ph") |
(method=="quad" & samp_pars=="disso_est" & est_pars=="mean_disso") |
(method=="linear" & samp_pars=="ph_est" & est_pars=="max_ph") |
(method=="linear" & samp_pars=="disso_est" & est_pars=="mean_disso")
)
那么ggplot
只会输出你需要的4个图
我有一个包含 20 个湖泊水质信息的数据框。对于每个湖泊,每次访问都会多次测量 ph 值和溶解氧水平,并将平均值和最大值记录在数据框中。使用两种不同的方法分别计算溶解氧和 ph 值的模型推导估计值。我想用 4 个散点图面板绘制一个图,描述每个估计“方法”和水质参数的观测值和估计值之间的关系。我想避免使用像 ggarrange()
这样的方法,因为我有一个我正在使用的自定义主题,这需要很多额外的工作。我最好的想法是在 ggplot()
中使用 facet_wrap()
,但这会产生不同变量的所有可能组合,而我只对 4 种特定组合感兴趣。
示例:
library(dplyr)
library(ggplot)
#creating a dataframe
df <- data.frame(
method = c(rep("quad", 10), rep("linear",10)),
date = c(rep("2021-11-17", 10),
rep("2022-02-27", 5),
rep("2021-11-20",5)),
ph_est = rnorm(20, 3),
disso_est = rnorm(20, 1),
mean_ph = rnorm(20, 0),
max_ph = rnorm(20, 2),
mean_disso = rnorm(20, 5),
max_disso = rnorm(20, 10)
)
df$ID <- seq.int(nrow(df))
#pivoting longer in order to plot
df_l <- pivot_longer(df,
cols = c("ph_est", "disso_est"),
names_to = "samp_pars",
values_to = "samp_vals")
df_l <- pivot_longer(df_l, cols = c("mean_ph", "max_ph", "mean_disso", "max_disso"),
names_to = "est_pars",
values_to = "est_vals")
#Attempting the plot
ggplot(df_l, aes(x = est_vals, y = samp_vals)) +
geom_point() +
facet_wrap(~ method + samp_pars + est_pars, scales = "free")
输出很接近,但我只想要 4 个面板:
1."quad" 估计 ph 与 mean ph[=17 的方法=]
2."quad" estimated DO 与 mean DO[=17 的方法=]
3.linear" estimated ph 与 max ph[=17 的方法=]
4.linear" estimated DO 与 mean DO[=17 的方法=]
有什么方法可以重新排列我的数据框来完成这项工作吗?还是我需要以不同的方式处理这整件事?
如有任何帮助,我们将不胜感激,并提前致谢!
您可以过滤数据框以仅保留 4 个绘图所需的组合。
在 ggplot
之前添加以下内容:
df_l <- filter(df_l,
(method=="quad" & samp_pars=="ph_est" & est_pars=="mean_ph") |
(method=="quad" & samp_pars=="disso_est" & est_pars=="mean_disso") |
(method=="linear" & samp_pars=="ph_est" & est_pars=="max_ph") |
(method=="linear" & samp_pars=="disso_est" & est_pars=="mean_disso")
)
那么ggplot
只会输出你需要的4个图