首页 > 解决方案 > 使用 data.tables get 构建构面时,让 labeller 表达变量名称

问题描述

在 ggplot2 中构建绘图时使用 data.tablesget函数从字符串中获取数据列时,如何使用 labeller 来显示列的名称及其值,即labeller = labeller(.cols = label_both) 返回get(facetvar):而不是facetvar.

as_labeller我可以使用(如此)在外部构造标签,但是如果不对名称或值进行硬编码,这将很乏味。

library(ggplot2)

df <- data.frame(coverage1 =rep( seq(0,1,0.20),each=4),
                 coverage2 = rep( seq(0,1,0.20),each=4),
                 setting=rep(c('1','2'),each=6),
                 setting2=rep(c('B'),each=12),
                 result=sample(100:1000, 12, replace = FALSE))

xvar='coverage1'
yvar='coverage1'
facetvar = 'setting'
outcomevar = 'result'


ggplot(data=df)+
  geom_point(aes(x=get(xvar), y=get(yvar), size=get(outcomevar)),shape=21)+
  facet_wrap(~get(facetvar), labeller = labeller(.cols = label_both))+
  labs(title = 'funny example plot', subtitle = 'how to get facetvar to show in labels',
  x = xvar, y = yvar, size = outcomevar)


在此处输入图像描述

标签: rggplot2labelfacet-wrap

解决方案


可能最简单的方法是创建一个包含列名的新列,df$facet_var = paste0(facetvar,':', df[,facetvar])无需使用labeller(df 需要是一个数据框)


推荐阅读