在ggplot2 facet标签中表达

use*_*545 9 label r ggplot2 facet-wrap

我想expression在一个ggplot2方面标签上有一个R.

假设我正在策划tips data.frame:

library(reshape2)
> head(tips)
  total_bill  tip    sex smoker day   time size
1      16.99 1.01 Female     No Sun Dinner    2
2      10.34 1.66   Male     No Sun Dinner    3
3      21.01 3.50   Male     No Sun Dinner    3
4      23.68 3.31   Male     No Sun Dinner    2
5      24.59 3.61 Female     No Sun Dinner    4
6      25.29 4.71   Male     No Sun Dinner    4
Run Code Online (Sandbox Code Playgroud)

如下:

library(ggplot2)
sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
         geom_point(shape=1) + 
         facet_wrap(~sex, ncol = 1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不想将"女性"和"男性"作为方面标签,而是分别为" 女性主体"和" 男性主体".据我所知,R中的标签是通过expression函数实现的,但我不知道如何将其与之结合起来facet_wrap.

Sté*_*ent 8

截至ggplot2 2.1.0:

data(tips, package="reshape2")
library(ggplot2)
ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
  geom_point(shape=1) + 
  facet_wrap(~sex, ncol=1, 
             labeller=label_bquote(.(levels(tips$sex)[sex])~subjects))
Run Code Online (Sandbox Code Playgroud)


ton*_*nov 6

看起来过于复杂,但有效.你必须使用facet_grid.

make_label <- function(value) {
  x <- as.character(value)
  bquote(italic(.(x))~subjects)
}

plot_labeller <- function(variable, value) {
  do.call(expression, lapply(levels(value), make_label))
}

ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
  geom_point(shape=1) + 
  facet_grid(.~sex, labeller = plot_labeller)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述