我真的很喜欢带状文字上方的线条,就像经济学家在其多面图上所做的一样(在“女性份额,%”以上)。
我尝试了两种方法,但两种方法都不适合我。
我创建了一个grob,在右上角有一条线,并用它替换了带状背景:
gg_red <- ggplot() + theme(plot.background = element_rect("#832301"))
top_line <- gridExtra::grid.arrange(gg_red,
layout_matrix = matrix(c(1, NA, NA, NA), byrow = TRUE, nrow = 2),
heights = c(1, 50),
widths = c(1,1),
padding = 0
)
然后我用它替换了地带的背景。
这种工作方式很丑陋
我创建了一个函数,在前三个字母上添加了一个小节。
underline_strips <- function(x, nchar = 3){
first <- x %>% str_sub(end = nchar)
last <- x %>% str_sub(start = nchar + 1)
return(paste0("bar('", first, "')*plain('", last,"')")) }
这在一行中表现不错,但是当我将它与str_wrap结合使用时,无论是之前还是之后,结果都非常糟糕。
总的来说,如果ggplot在面板外更加灵活,而无需深入了解网格包,我会喜欢的。无论如何,我将不胜感激任何建议。
答案 0 :(得分:0)
看看这是否对您有用:
anno_rect <- data.frame(x1 = c(1.3, NA), x2 = c(2, NA),
y1 = c(39, NA), y2 = c(40, NA),
vs = c(0, 1))
anno_line <- data.frame(x1 = c(1.3, 1, 5.7, 5.7),
y1 = c(40, 40, 40, 40),
vs = c(0, 1, 0, 1))
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_line() +
theme(plot.margin = margin(1.2, .5, 0, 0, "cm"),
legend.position = "none",
strip.background.x = element_blank(),
strip.text = element_text(hjust = 0)) +
coord_cartesian(xlim = c(1.5, 5.5), ylim = c(10, 35), clip = "off") +
geom_rect(
data = anno_rect,
aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = "red"),
inherit.aes = FALSE) +
geom_line(
data = anno_line,
aes(x = x1, y = y1, color = "red"),
inherit.aes = FALSE) +
annotate("segment", x = 1.3, xend = 1.6, y = 38, yend = 38) +
facet_wrap(~ vs)
我们正在为注释创建data.frames以绕过facet函数的格式设置。要进行这项工作,必须对页边距和绘图区域进行一些调整。
要使其成为“自动”工具,您将需要通过ggplot_build()
从多面图中提取一些参数,并使用它们来填充注释数据,帧和参数以及coord_cartesian()
的限制。 / p>
您还可以查看paste()
,将___ \n
添加到构面标签中。