我正在尝试
- 实现自动或强制换行
- 将文本两端对齐(左对齐或左右对齐)
- 在 gglot 图例标签中包含希腊字母和百分号
我尝试了几种方法,但好像无法将所有技巧结合起来。
我可以通过在标签中插入 \n
来实现换行,但是这似乎不能在图例标签中使用希腊字母。或者我可以通过组合 mtext()
和 bquote()
在基础图中插入一段文本来实现换行和希腊字母(编辑),但正如 Gregor 在评论中所指出的那样,这在 ggplot
中不起作用。下面我将 list
与 paste0()
组合起来将文本传递给图例标签:问题是我找不到插入希腊字母(例如 gamma)的方法。
感谢建议。
这是我的一个尝试的 MWE 示例 (编辑:改进后 MWE):
label1.line1 <- "Not much to say about this one"
label2.line1 <- "blabla blabla, blabla blabla, blee blee blee (bling, bling, bling),"
label2.line2 <- paste0("(", "1900-2014: g = 1.50%, gamma = 2.75%, and r = 2.30%",")")
label3.line1 <- "blabla blabla, blabla blabla, blee blee blee (bling, bling, bling),"
label3.line2 <- paste0("(", "1900-2014: g = 2.50%, gamma = 1.75%, and r = 2.30%",")")
labels_fixed <- list(
label1.line1,
paste0(label2.line1, "\n", label2.line2),
paste0(label3.line1, "\n", label3.line2)
)
library(ggplot2)
library(scales)
library(grid) # provides unit() function used to tweak spacing inside legend
ggplot(data = mtcars, aes(x = mpg, y = wt, group = factor(cyl), colour = factor(cyl), shape = factor(cyl))) +
geom_line() + geom_point(size = 3) + theme_bw() +
scale_shape_manual(name = "Details", values = c(17, 21, 15),
labels = labels_fixed) +
scale_colour_manual(name = "Details", values = c("darkred", "darkgreen", "darkblue"),
labels = labels_fixed) +
theme(legend.key = element_blank(),
legend.position = c(.65, .8),
legend.background = element_rect(colour = "black"),
legend.key.size = unit(2, "lines"),
legend.text = element_text(size = 15))
一个小问题是,当图例文本变成多行时,图例行间距需要进行调整:我可以调整legend.key.size
和legend.text
来获得比默认更好的效果,因为默认效果太拥挤了。
我还尝试了另一个方法,涉及cat(strwrap("长标签在这里"), sep = "\n")
,但我无法让它起作用。我也尝试过atop
,但每行文本太小了,而为了达到所需的层叠效果所需的嵌套过于繁琐。
有没有办法使用希腊字母?
以下是一些有用的建议,但我无法让它们起作用,例如在1和2中提到的mtext()
和bquote()
组合:
mtext
)与网格图形(如ggplot)不兼容。 - Gregor Thomasfamily="mono"
(在主题中的element_text内部)与Unicode不兼容。 - PatrickTtitle = element_text(family = "DejaVu Sans Mono")
- PatrickT