I am trying to use a walk
function inside another function. I have a table on the right side of my plot, and I want it to change according to the Site ID variable's value.
Below is an example of what I want the table to look like by using mytable
as a placeholder. However, for my actual use case, I want the values to vary by Site_ID
:
Site_ID
= " H1 ": Alpha1
should be 0.008 , n_ho
should be 1.09 , and A
should be 5.45 ;
Site_ID
= " H2 ": Alpha1
should be 0.125 , n_ho
should be 2.28 , and A
should be 2.78 .
etc.
My data:
> dput(Infil_Data2)
structure(list(
Time = c(0L, 30L, 60L, 90L, 120L, 150L, 180L,
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L,
210L, 240L, 270L, 300L, 0L, 30L, 60L, 90L, 120L, 150L, 180L,
210L, 240L, 270L, 300L),
Site_ID = c("H1", "H1", "H1", "H1",
"H1", "H1", "H1", "H1", "H1", "H1", "H1", "H2", "H2", "H2", "H2",
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3",
"H3", "H3", "H3", "H3", "H3", "H3", "H3"),
Vol_mL = c(63, 62,
60, 59, 58, 56, 54, 52.5, 50, 48.5, 46.5, 82, 77, 73, 68, 65,
51, 56, 52, 47.5, 42.5, 37.5, 69, 67, 65, 63, 61, 60, 58, 56,
54, 51.5, 49),
Soil_Type = c("Clay", "Clay", "Clay", "Clay",
"Clay", "Clay", "Clay", "Clay", "Clay", "Clay", "Clay", "Loamy Sand",
"Loamy Sand", "Loamy Sand", "Loamy Sand", "Loamy Sand", "Loamy Sand",
"Loamy Sand", "Loamy Sand", "Loamy Sand", "Loamy Sand", "Loamy Sand",
"Sandy Loam", "Sandy Loam", "Sandy Loam", "Sandy Loam", "Sandy Loam",
"Sandy Loam", "Sandy Loam", "Sandy Loam", "Sandy Loam", "Sandy Loam",
"Sandy Loam"),
Radius = c(1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6,
1.6, 1.6, 1.6, 1.6, 2.25, 2.25, 2.25, 2.25, 2.25, 2.25, 2.25,
2.25, 2.25, 2.25, 2.25, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6,
1.6, 1.6, 1.6),
Suction = c("X.0.5", "X.0.5", "X.0.5", "X.0.5",
"X.0.5", "X.0.5", "X.0.5", "X.0.5", "X.0.5", "X.0.5", "X.0.5",
"X.1", "X.1", "X.1", "X.1", "X.1", "X.1", "X.1", "X.1", "X.1",
"X.1", "X.1", "X.2", "X.2", "X.2", "X.2", "X.2", "X.2", "X.2",
"X.2", "X.2", "X.2", "X.2"),
Sqrt_Time.x = c(0, 5.477225575,
7.745966692, 9.486832981, 10.95445115, 12.24744871, 13.41640786,
14.49137675, 15.49193338, 16.43167673, 17.32050808, 0, 5.477225575,
7.745966692, 9.486832981, 10.95445115, 12.24744871, 13.41640786,
14.49137675, 15.49193338, 16.43167673, 17.32050808, 0, 5.477225575,
7.745966692, 9.486832981, 10.95445115, 12.24744871, 13.41640786,
14.49137675, 15.49193338, 16.43167673, 17.32050808),
Cal_Vol_cm = c(0,
0.124339799, 0.373019398, 0.497359197, 0.621698996, 0.870378595,
1.119058194, 1.305567893, 1.616417391, 1.80292709, 2.051606688,
0, 0.621698996, 1.119058194, 1.74075719, 2.113776588, 3.854533778,
3.232834782, 3.730193979, 4.289723076, 4.911422072, 5.533121068,
0, 0.248679599, 0.497359197, 0.746038796, 0.994718394, 1.119058194,
1.367737792, 1.616417391, 1.865096989, 2.175946488, 2.486795986),
X = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA),
X.1 = c(3.141592654, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
Alpha1 = c("0.008",
"0.008", "0.008", "0.008", "0.008", "0.008", "0.008", "0.008",
"0.008", "0.008", "0.008", "0.124", "0.124", "0.124", "0.124",
"0.124", "0.124", "0.124", "0.124", "0.124", "0.124", "0.124",
"0.075", "0.075", "0.075", "0.075", "0.075", "0.075", "0.075",
"0.075", "0.075", "0.075", "0.075"),
n_ho = c("1.09", "1.09",
"1.09", "1.09", "1.09", "1.09", "1.09", "1.09", "1.09", "1.09",
"1.09", "2.28", "2.28", "2.28", "2.28", "2.28", "2.28", "2.28",
"2.28", "2.28", "2.28", "2.28", "1.89", "1.89", "1.89", "1.89",
"1.89", "1.89", "1.89", "1.89", "1.89", "1.89", "1.89"),
A = c(5.452375501,
5.452375501, 5.452375501, 5.452375501, 5.452375501, 5.452375501,
5.452375501, 5.452375501, 5.452375501, 5.452375501, 5.452375501,
2.786831249, 2.786831249, 2.786831249, 2.786831249, 2.786831249,
2.786831249, 2.786831249, 2.786831249, 2.786831249, 2.786831249,
2.786831249, 5.332170741, 5.332170741, 5.332170741, 5.332170741,
5.332170741, 5.332170741, 5.332170741, 5.332170741, 5.332170741,
5.332170741, 5.332170741)),
row.names = c(NA, -33L), class = "data.frame")
My code:
library(dplyr)
library(purrr)
library(ggplot2)
library(ggpmisc)
library(gridExtra)
mytable <- cbind(c("Alpha1", "n_ho", "A"), c(1, 2, 3))
plot_2 <-
Infil_Data2 %>%
split(.$Site_ID) %>%
map2(names(.), ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) +
geom_point() +
labs(title = paste(.y)) +
theme(plot.title = element_text(hjust = 0.5)) +
stat_smooth(mapping = aes(x = Sqrt_Time.x, y = Cal_Vol_cm),
method = "lm", se = FALSE,
formula = y ~ poly(x, 2, raw = TRUE), color = "red") +
theme(plot.margin = unit(c(1, 5, 1, 1), "cm")) +
stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
label.x.npc = "left", label.y.npc = 0.90, #set the position of the eq
formula = y ~ poly(x, 2, raw = TRUE), parse = TRUE, rr.digits = 3) +
annotation_custom(tableGrob(mytable, rows = NULL),
xmin = unit(20,"npc"), xmax = unit(25,"npc"),
ymin = 0.05, ymax = 0.1))
pdf("allplots_2.pdf", onefile = TRUE)
walk(plot_2, print)
dev.off()
Is this what you are looking for?
plot_2 <-
Infil_Data2 %>%
split(.$Site_ID) %>%
map2(names(.), ~ggplot(.x, aes(Sqrt_Time.x, Cal_Vol_cm)) +
geom_point() +
labs(title = paste(.y)) +
theme(plot.margin = unit(c(1, 5, 1, 1), "cm")) +
annotation_custom(tableGrob(cbind(c("Alpha1", "n_ho", "A"),
c(.x$Alpha1[1],
.x$n_ho[1],
.x$A[1])),
rows = NULL),
xmin = unit(20, "npc"), xmax = unit(25, "npc"),
ymin = 0.05, ymax = 0.1))
(I've excluded some of the code for geom layers / other aspects of the plot's appearance, as I do not think they are central to the question asked.)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.