R语言 ggplot2刻面标签中的表达

velaa5lx  于 2023-05-11  发布在  其他
关注(0)|答案(4)|浏览(193)

我希望在ggplot2 facet标签中有一个R expression
假设我正在绘制tipsdata.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结合起来。

nwlqm0z1

nwlqm0z11#

截至ggplot22.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))
zbwhf8kr

zbwhf8kr2#

看起来很复杂,但工作。你必须使用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)

cpjpxq1n

cpjpxq1n3#

以下适用于R 4.0.3和ggplot 2 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

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

u7up0aaq

u7up0aaq4#

我知道这是一个老帖子,但我喜欢label_parsed函数。它适用于factor中的标签:

data(tips, package="reshape2")
library(ggplot2)
tips %>%
  mutate(sex = factor(sex,
                      levels = c("Female", "Male"),
                      labels = c(expression(italic(Female)~Subjects), 
                                 expression(italic(Male)~Subjects)))) %>%
  ggplot(aes(x=total_bill, y=tip/total_bill)) + 
  geom_point(shape=1) + 
  facet_wrap(~sex, ncol = 1,labeller = label_parsed)

这个返回

相关问题