【发布时间】:2015-02-25 17:58:46
【问题描述】:
我正在尝试
- 有换行符(自动或强制)
- 对齐文本(左对齐或左右对齐)
- 有希腊字母和百分号
在 gglot 图例标签内。
我已经尝试了几种方法,但我似乎无法将我读到的所有技巧结合起来。
我可以通过在标签中插入\n 来获得换行符,但这似乎不适用于希腊字母,而不是在图例标签中。或者我可以通过组合mtext() 和bquote() 在情节中插入一段文本(EDIT),但正如 Gregor 在 cmets 中指出的那样,我可以在基本情节中使用换行符和希腊字母部分,这不适用于ggplot。下面我结合list 和paste0() 将文本传递给图例标签:问题是我找不到插入希腊字母的方法,例如伽玛。
感谢您的建议。
这是我尝试过的一个 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("long label here"), sep = "\n") 的建议,但我无法让它发挥作用。我也试过atop,但这使得每一行都太小了,实现所需堆叠所需的嵌套也很乏味。
有没有办法得到希腊字母?
以下是一些我无法在工作中提出的有用建议,例如mtext() 和 bquote() 的组合在 1 和 2 中提到:
【问题讨论】:
-
基本图形函数(如
mtext)与网格图形(如ggplots)不兼容。 -
要获取希腊字母和“\n”,您可能想要使用 Unicode 字符(可能使用 cairo 设备),或者 tikzDevice
-
谢谢巴蒂斯特!我已经使用您的提示回答了我自己的问题。随意添加建议,我当然会接受你的回答。
-
family="mono"(在主题内的element_text内)不能很好地与 unicode 配合使用。 -
这个作品
title = element_text(family = "DejaVu Sans Mono")