r - 使用 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)
解决方案
可能最简单的方法是创建一个包含列名的新列,df$facet_var = paste0(facetvar,':', df[,facetvar])
无需使用labeller
(df 需要是一个数据框)
推荐阅读
- python - 如何在python中有效地映射时间序列之间的数据
- mysql - jdbc 驱动程序在 kubernetes 中不起作用,超时失败
- delphi - 为什么 MoveFile 缺少运算符?
- matlab - 如何在空终止符后修剪字符串的一部分?
- c++ - 有没有办法根据用户的输入访问类对象的信息?
- javascript - 如何在leafletjs中使用L.control.layers激活多个L.markerClusterGroup(),而不仅仅是切换?
- javascript - 按某个元素后跟另一个元素对对象数组进行分组
- javascript - 如何将值从一个 card-div 传递到另一个 card-div
- powershell - 解析信息并仅返回匹配的信息
- vue.js - 排除 json 文件捆绑在 Vue 中