10

我想在刻面标签中有expression一个ggplot2R。

假设我正在绘制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

如下:

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

在此处输入图像描述

我不想将“女性”和“男性”作为分面标签,而是分别使用:“女性主题”和“男性主题”。据我所知,在 R 中将标签斜体化是通过该expression函数实现的,但我不知道如何将其与facet_wrap.

4

3 回答 3

10

截至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))
于 2017-03-22T11:48:38.410 回答
7

看起来过于复杂,但有效。你必须使用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)

在此处输入图像描述

于 2015-09-21T11:05:18.517 回答
2

以下适用于 R 4.0.3 和 ggplot2 3.3.2

library(ggplot2)
data(tips, package="reshape2")
tips$sex = as.character(tips$sex)
sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + 
  geom_point(shape=1) + 
  facet_wrap(~sex, ncol = 1, labeller = label_bquote(italic(.(sex))~subjects))
sp

label_bquote按照@Stéphane Laurent 的建议使用,但不需要将级别转换为 bquote 中对我来说失败的正确字符。

于 2020-10-23T19:12:00.623 回答