r - 如何有选择地选择 facet_wrap() 组合

我有一个包含 20 个湖泊水质信息的数据框。对于每个湖泊,每次访问都会多次测量 ph 值和溶解氧水平,并将平均值和最大值 values 记录在数据框中。使用两种不同的方法分别计算模型得出的溶解氧和 ph 值估计值。我想制作一个包含 4 个散点图面板的图,描绘每个估计“方法”和水质参数的观察到的 values 和估计的 values 之间的关系。我想避免使用像 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. 估计 ph 值与平均 ph 值的“四边形”方法

2. 估计 DO 与平均 DO 的“quad”方法

3. 估计 ph 值与最大 ph 值的“线性”方法

4. 估计 DO 与平均 DO 的“线性”方法

有没有办法我可以重新排列我的数据框来完成这项工作?还是我需要以不同的方式处理整个事情?

任何帮助将不胜感激,并提前感谢您!

回答1

您可以过滤数据框以仅保留 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 个图。

相似文章

r - 从 shinyapp 下载许多图

问题:我有大量数据正在尝试为我的用户可视化。这可能是几百个地块。目前在应用程序中,我正在使用facet_wrap制作ggplot2小倍数,并且在大约100个地块中效果很好。但是,我希望用户能够导出所有...

r - ggplot2 运行几分钟而不作图

我正在尝试绘制下面的向量,但是当我运行该函数时,它只是继续运行并且不绘制。我等了5分钟才感到不舒服,然后在控制台中单击停止。想知道发生了什么。到目前为止,我没有遇到任何麻烦。虽然我使用带有七个变量的f...

最新文章