重复:
library(tidyverse)
df <- tibble::tibble(
epoca = factor(c("H", "S", "S", "H", "S", "H", "S"), levels = c("S", "H")),
ano = c("2019", "2018", "2019", "2021", "2022", "2022", "2021"),
n = rep(3:1, c(3L, 2L, 2L)),
etiqueta = rep(c("3", "2", "1"), c(3L, 2L, 2L)),
ffvv = c(rep("a", 3), rep("b", 4))
)
df %>%
ggplot(aes(x = epoca, y = n, fill = epoca)) +
geom_col(width = 0.8, position = position_dodge(0.8)) +
geom_text(aes(x = epoca, label = etiqueta),
position = position_dodge(0.9), vjust = 0, size = 8) +
ggh4x::facet_nested(cols = vars(ffvv, ano),
switch = "x",
scales = "free_x",
space = "free_x") +
theme(strip.background = element_rect(fill = "white"),
strip.text = element_text(size = 25, lineheight = 0.6),
strip.placement = "outside",
axis.text.x = element_text(angle = 0, size = 27, lineheight = unit(.8, "lines")))
输出:
所需输出:(勾选红线)
3条答案
按热度按时间rkkpypqq1#
没有与您想要的线条相匹配的主题元素,因此您需要发挥创意。我更喜欢ggplot是独立的,所以与其在图上单独画线,我可能会把它们画成
geom_path
元素。这需要使用coord_cartesian
并关闭裁剪和固定的y轴限制:ar7v8xwq2#
另一个(手动)解决方案是使用{cowplot}:
其中
g
是您已经拥有的图,保存为变量。这不是一个完美的解决方案,因为它通常需要一点试错来获得正确的坐标。它使用了geom_path()
,但这意味着你不必处理现有图的裁剪和坐标。如果更多的是为了分离不同的方面,那么将
colour = "red"
添加到theme
中的strip.background
元素是一种替代方法:m3eecexj3#
另一种方法是使用
geom_segment()
: