我在尝试着
-
有换行符(自动或强制)
-
证明文本的合理性(左侧或左侧和右侧)
-
有希腊字母和百分号
在gglot图例标签内 .
我已经尝试了几种方法,但我似乎无法将我读到的所有技巧结合起来 .
我可以通过在标签中插入 \n
来获取换行符,但这似乎不适用于希腊字母,而不适用于图例标签 . 或者我可以通过组合 mtext()
和 bquote()
在基础图中使用换行符和希腊字母将一段文本插入到图中,( EDIT )但正如Gregor在评论部分中所指出的,这不适用于 ggplot
. 下面我将 list
与 paste0()
组合在一起,将文字传递给图例标签:问题是我找不到插入希腊字母的方法,例如:伽马 .
感谢你的建议 .
这是一个MWE我的一次尝试( Edit: 改进了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
但是这使得每条线太小而且实现所需堆叠所需的嵌套是乏味的 .
有没有办法得到希腊字母?
以下是一些我无法工作的有用建议,例如:在1和2中提到了 mtext()
和 bquote()
的组合:
1 回答
巴蒂斯特的建议很明显:unicode走了很长一段路 . 用
\u03B3
替换上面的每个gamma实例,它将显示为希腊语 . 惊人!可以使用
cairo
设备(ref)进行打印:也有效:
ggsave("greek.pdf", device = cairo_pdf)
以下是我发现有用的unicode符号选择:
可悲的是,并非所有特殊字符都具有相同的unicode . 例如,有一个用于y-hat的unicode,但没有用于x-hat的unicode . 可以将字母x与unicode栏组合在一起,如
"x\u0305" = x̅
或"p\u0302" = p̂
,但这似乎打印得不是很好 .我也很难打印希腊unicode作为轴标签,因此在这些情况下,我使用
annotate()
选项coord_cartesian(clip = "off")
以确保打印在轴下方的标签不会被剪裁("on"是默认剪裁行为) .有时您可以直接使用该字符,例如:
当unicode失败时,您可以尝试
expression()
,例如x̄
:为方便起见,我在下面复制了一些常用的希腊字母'unicodes . 可以找到更多的unicodes,例如http://en.wikipedia.org/wiki/List_of_Unicode_characters
有关使用unicode的字体的信息:https://en.wikipedia.org/wiki/List_of_typefaces#Unicode_fonts
一些货币符号: