ggplot图例标签内的希腊字母,符号和换行符

Pat*_*ckT 31 r ggplot2

我在尝试着

  1. 换行(自动或强制)
  2. 证明文本的合理性(左侧或左侧和右侧)
  3. 有希腊字母和百分号

在gglot图例标签内.

我已经尝试了几种方法,但我似乎无法将我读到的所有技巧结合起来.

我可以通过插入\n标签来获得换行符,但这似乎不适用于希腊字母,而不适用于图例标签.或者我可以在基础图中通过组合mtext()bquote()插入一段文本(EDIT)来设置换行符和希腊字母,但正如Gregor在评论部分中指出的那样,这不起作用ggplot.下面我结合list使用paste0()to将文本传递给图例标签:问题是我找不到插入希腊字母的方法,例如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)) 
Run Code Online (Sandbox Code Playgroud)

一个小问题是图例文本要小得多,因此需要调整图例行间距:我能够调整legend.key.sizelegend.text获得比默认值更好的结果,这是非常狭窄的.

我还尝试了另一个涉及的建议cat(strwrap("long label here"), sep = "\n"),但我无法让它发挥作用.我也试过atop但是这使得每条线都太小而且实现所需堆叠所需的嵌套是繁琐的.

有没有办法得到希腊字母?

在此输入图像描述

以下是一些我无法工作的有用建议,例如1和2中提到的组合mtext()bquote()提及:

  1. 图标签中的表达式和新行
  2. 表达式()中的换行符?
  3. 将水平图例包裹在多行中
  4. 使用表达式(粘贴(将数学符号插入到ggplot图例中)
  5. 带表达式的ggplot2双行标签
  6. 如何使用latex来注释()ggplot
  7. ggplot中的希腊字母注释

Pat*_*ckT 34

巴蒂斯特的建议很明显:unicode走了很长一段路.替换上面的每个gamma实例,\u03B3它将显示为希腊语.惊人!

可以使用cairo设备进行打印(参考):

library(Cairo)
cairo_pdf(file = "ggplot-greek.pdf", width = 8, height = 5)
## ggplot object created here
dev.off()
Run Code Online (Sandbox Code Playgroud)

还有效: ggsave("greek.pdf", device = cairo_pdf)

以下是我发现有用的unicode符号选择:

"\U016B" = ?
"\U016A" = ?
"\U00FB" = û
"\U00DB" = Û
"\U0233" = ?
"\U0232" = ?
"\U0177" = ?
"\U0176" = ?
"\U0113" = ?
"\U0112" = ?
"\u00EA" = ê
"\U00CA" = Ê
"\U003BC\U2080" = ??
"\U003BC\U2081" = ??
"R\U00B2" = R²
"\u221E" = ?
"\u2248" = ?
"\U2260" = ? 
"\u03C3/\u221An" = ?/?n
Run Code Online (Sandbox Code Playgroud)

可悲的是,并非所有特殊字符都具有相同的unicode.例如,有一个用于y-hat的unicode,但没有用于x-hat的unicode.可以将字母x与unicode栏组合在一起,如在"x\u0305" = x?或中"p\u0302" = p?,但似乎打印效果不佳.

我也有过困难打印希腊Unicode作为轴标签,所以在这种情况下我使出annotate()的选项coord_cartesian(clip = "off"),以确保印刷轴下方的标签不会被切去("开"是默认的剪贴行为).

有时您可以直接使用该字符,例如:

myplot + labs(title  = "±")
Run Code Online (Sandbox Code Playgroud)

当unicode失败时,您可以尝试expression(),例如x?:

title = expression(paste("z = (", bar(x), "-\u03BC)/(\u03C3/\u221An)", sep = ""))  
library(ggplot2)
ggplot() + labs(title = title) + theme_bw() 
Run Code Online (Sandbox Code Playgroud)

标题

为方便起见,我在下面复制了一些常用的希腊字母'unicodes.可以找到更多的unicodes,例如http://en.wikipedia.org/wiki/List_of_Unicode_characters

\u0391  ?   Greek Capital Letter Alpha
\u0392  ?   Greek Capital Letter Beta
\u0393  ?   Greek Capital Letter Gamma
\u0394  ?   Greek Capital Letter Delta
\u0395  ?   Greek Capital Letter Epsilon
\u0396  ?   Greek Capital Letter Zeta
\u0397  ?   Greek Capital Letter Eta
\u0398  ?   Greek Capital Letter Theta
\u0399  ?   Greek Capital Letter Iota
\u039A  ?   Greek Capital Letter Kappa
\u039B  ?   Greek Capital Letter Lambda
\u039C  ?   Greek Capital Letter Mu
\u039D  ?   Greek Capital Letter Nu
\u039E  ?   Greek Capital Letter Xi
\u039F  ?   Greek Capital Letter Omicron
\u03A0  ?   Greek Capital Letter Pi
\u03A1  ?   Greek Capital Letter Rho
\u03A3  ?   Greek Capital Letter Sigma
\u03A4  ?   Greek Capital Letter Tau
\u03A5  ?   Greek Capital Letter Upsilon
\u03A6  ?   Greek Capital Letter Phi
\u03A7  ?   Greek Capital Letter Chi
\u03A8  ?   Greek Capital Letter Psi
\u03A9  ?   Greek Capital Letter Omega
\u03B1  ?   Greek Small Letter alpha
\u03B2  ?   Greek Small Letter beta
\u03B3  ?   Greek Small Letter gamma
\u03B4  ?   Greek Small Letter delta
\u03B5  ?   Greek Small Letter epsilon
\u03B6  ?   Greek Small Letter zeta
\u03B7  ?   Greek Small Letter eta
\u03B8  ?   Greek Small Letter theta
\u03B9  ?   Greek Small Letter iota
\u03BA  ?   Greek Small Letter kappa
\u03BB  ?   Greek Small Letter lambda
\u03BC  ?   Greek Small Letter mu
\u03BD  ?   Greek Small Letter nu
\u03BE  ?   Greek Small Letter xi
\u03BF  ?   Greek Small Letter omicron
\u03C0  ?   Greek Small Letter pi
\u03C1  ?   Greek Small Letter rho
\u03C2  ?   Greek Small Letter final sigma
\u03C3  ?   Greek Small Letter sigma
\u03C4  ?   Greek Small Letter tau
\u03C5  ?   Greek Small Letter upsilon
\u03C6  ?   Greek Small Letter phi
\u03C7  ?   Greek Small Letter chi
\u03C8  ?   Greek Small Letter psi
\u03C9  ?   Greek Small Letter omega
Run Code Online (Sandbox Code Playgroud)

信息有关哪种字体Unicode的使用方法:https://en.wikipedia.org/wiki/List_of_typefaces#Unicode_fonts

一些货币符号:

# http://www.fileformat.info/info/unicode/category/Sc/list.htm
Character   Name    Browser     Image
\u0024  DOLLAR SIGN     $
\u00A2  CENT SIGN   ¢
\u00A3  POUND SIGN  £
\u00A4  CURRENCY SIGN   ¤
\u00A5  YEN SIGN    ¥
\u058F  ARMENIAN DRAM SIGN
\u060B  AFGHANI SIGN    ?
\u09F2  BENGALI RUPEE MARK  ?
\u09F3  BENGALI RUPEE SIGN  ?
\u09FB  BENGALI GANDA MARK
\u0AF1  GUJARATI RUPEE SIGN     ?
\u0BF9  TAMIL RUPEE SIGN    ?
\u0E3F  THAI CURRENCY SYMBOL BAHT   ?
\u17DB  KHMER CURRENCY SYMBOL RIEL  ?
\u20A0  EURO-CURRENCY SIGN  ?
\u20A1  COLON SIGN  ?
\u20A2  CRUZEIRO SIGN   ?
\u20A3  FRENCH FRANC SIGN   ?
\u20A4  LIRA SIGN   ?
\u20A5  MILL SIGN   ?
\u20A6  NAIRA SIGN  ?
\u20A7  PESETA SIGN     ?
\u20A8  RUPEE SIGN  ?
\u20A9  WON SIGN    ?
\u20AA  NEW SHEQEL SIGN     ?
\u20AB  DONG SIGN   ?
\u20AC  EURO SIGN   €
\u20AD  KIP SIGN    ?
\u20AE  TUGRIK SIGN     ?
\u20AF  DRACHMA SIGN    ?
\u20B0  GERMAN PENNY SIGN   ?
\u20B1  PESO SIGN   ?
\u20B2  GUARANI SIGN    ?
\u20B3  AUSTRAL SIGN    ?
\u20B4  HRYVNIA SIGN    ?
\u20B5  CEDI SIGN   ?
\u20B6  LIVRE TOURNOIS SIGN     ?
\u20B7  SPESMILO SIGN   ?
\u20B8  TENGE SIGN  ?
\u20B9  INDIAN RUPEE SIGN   ?
\u20BA  TURKISH LIRA SIGN   ?
\u20BB  NORDIC MARK SIGN    ?
\u20BC  MANAT SIGN  ?
\u20BD  RUBLE SIGN  ?
\uA838  NORTH INDIC RUPEE MARK
\uFDFC  RIAL SIGN   ?
\uFE69  SMALL DOLLAR SIGN   ?
\uFF04  FULLWIDTH DOLLAR SIGN   ?
\uFFE0  FULLWIDTH CENT SIGN     ?
\uFFE1  FULLWIDTH POUND SIGN    ?
\uFFE5  FULLWIDTH YEN SIGN  ?
\uFFE6  FULLWIDTH WON SIGN  
Run Code Online (Sandbox Code Playgroud)

  • ``\ u2248 =≈``.另见130页您不需要的unicode符号:http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/unicode-math/unimath-symbols.pdf (4认同)
  • 很棒的答案!对于其他符号(我自己在寻找丹麦克朗),请使用列表[here](http://www.xe.com/symbols.php)。只是不要忘记`\ u`等。 (2认同)