Much like a previous user , I would like a panel of text underneath my plot.
With the previous post, I have gotten pretty far, but I would still like to modify my plot. With dummy data (borrowed from the previous post), my plot looks like this: Current plot
library(patchwork)
line_size <- 1.2
base_size <- 20
axis_text_rel_size = -1
title_text_rel_size = 5
d <- tibble(
Rodent= c(rep("Mouse",11),
rep("Hamster",7),
rep("Guinea pig",4),
rep("Gerbil",12)),
`Weight (gm)` = rnorm(34,25,10),
`Heat:` = c(rep("+",11),rep("-",7),rep("+",4),rep("+",12))
, `Needle:` = c(rep("+",11),rep("+",7),rep("+",4),rep("+",12)),
`Comb.:` = c(rep("Phen",11),rep("-",7),rep("-",4),rep("Met",12)),
)
p1 <- d %>%
ggplot(aes(Rodent,`Weight (gm)`)) +
geom_boxplot(lwd=1.3,colour="black")+
scale_y_continuous(expand = expansion(mult = c(0, 0.05)))+
labs(y = "Percentage") +
theme_foundation(base_size = base_size, base_family = "sans")+
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
text = element_text(colour = "black"),
plot.title = element_text(face = "bold",
size = rel(1), hjust = 0.5),
axis.line = element_line(colour="black", size = line_size),
axis.ticks = element_line(colour="black", size = line_size),
axis.title = element_text(face = "bold", size = rel(1)),
axis.title.y = element_text(angle = 90, vjust = 2),
axis.title.x = element_blank(),
axis.text = element_text(face = "bold", size = rel(1)),
axis.text.x = element_blank(),
plot.background = element_blank(),
legend.title=element_blank(),
legend.position = "none"
)
d1 <- d %>%
select(-`Weight (gm)`) %>%
pivot_longer(-Rodent)
p2 <- d1 %>%
ggplot(aes(Rodent, fct(name), label = value)) +
geom_text(size = 7.2) +
labs(x = NULL, y = NULL)+
theme_foundation(base_size = base_size, base_family = "sans")+
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
text = element_text(colour = "black"),
axis.title = element_text(face = "bold", size = rel(0.9)),
axis.title.y = element_text(angle = 90, vjust = 2),
axis.text = element_text(face = "bold", size = rel(1)),
axis.text.x = element_blank(),
axis.ticks=element_blank(),
plot.background = element_blank()
)
p1 / p2
If it is possible, I would like the panel to go Heat > Needle > Comb, but I don't know where to refactor. I would also like to reduce the spacing between the three "treatment options" (Heat, needle, comb) as well as the spacing between the y-axis and its title. Also, the fonts in the panel seem to differ depending whether its a header or not.
I am not married to this code, so if there is an easier way to get a panel below the plot, I would really appreciate it! Thank you :)
To achieve your desired order for the table convert
name
ind1
to afactor
with the levels set in your desired order. For the labels use the same font size as for theme, i.e.20 / .pt
or 20pt instead of 7.2 which is approx. 20.5 pt. To remove the space between the axis title and the axis text you could set `vjust´ to a negative value. Additionally I use a negative plot margin on the left. For the spacing between the table categories a simple option would be to increase the size of the main plot. This way the table gets squished. Finally, I collected the duplicated theme options and apply them in one go where creating the patch.