如何解决尝试从 ggplot 上的 expss 包中实现 use_labels
我有一个数据框,我使用 expss 库将标签应用于变量。 示例数据:
library(expss)
data = apply_labels(data,state= "State",Q1_Gender_1 = "Male",Q1_Gender_2 = "Female")
数据结构最终看起来像这样
dput(data)
structure(list(state = structure("Iowa",label = "State",class = c("labelled","character")),Q1_Gender_1 = structure(0.11,label = "Male","numeric")),Q1_Gender_2 = structure(0.89,label = "Female","numeric"))),class = "data.frame",row.names = c(NA,-1L))
在我应用标签之前,此数据的绘图有效,但我现在不知道如何应用 use_labels 来使绘图与标记变量一起输出。
p<- data %>%
select(-state)%>%
pivot_longer(everything(),names_to="variable",values_to="value") %>%
ggplot(aes(x = reorder(variable,value),y = value,fill = variable,text = paste0(value*100,"%"))) +
geom_bar(stat = "identity",position = "dodge")+
theme(axis.title.x=element_blank(),axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.title.y=element_blank())+
coord_flip()+
theme(legend.position = "none")
vignette from expss 说我应该像这样应用 use_labels:
use_labels(mtcars,{
# '..data' is shortcut for all 'mtcars' data.frame inside expression
ggplot(..data) +
geom_point(aes(y = mpg,x = wt,color = qsec)) +
facet_grid(factor(am) ~ factor(vs))
})
我已经尝试了所有我能想到的方法来应用 use_labels
。我的理解是语法基本上是 use_labels(data,{exp})
但 package documentation 也显示用法为 use_labels(data,expr)
并且它可以在其他 expss 函数中使用,例如 calculate(data,expr,use_labels = FALSE)
我需要一些帮助来弄清楚如何应用 use_labels
或者,是否有更好的解决方案来将标签应用于数据集以用于这样的绘图?
解决方法
您需要将 data.frame 作为 use_labels
中的第一个参数,并在表达式中使用 ..data
作为占位符:
library(dplyr)
library(tidyr)
library(ggplot2)
library(expss)
data = structure(list(state = structure("Iowa",label = "State",class = c("labelled","character")),Q1_Gender_1 = structure(0.11,label = "Male","numeric")),Q1_Gender_2 = structure(0.89,label = "Female","numeric"))),class = "data.frame",row.names = c(NA,-1L))
use_labels(data,{
..data %>%
select(-state)%>%
drop_all_labels() %>%
pivot_longer(everything(),names_to="variable",values_to="value") %>%
ggplot(aes(x = reorder(variable,value),y = value,fill = variable,text = paste0(value*100,"%"))) +
geom_bar(stat = "identity",position = "dodge")+
theme(axis.title.x=element_blank(),axis.text.x=element_blank(),axis.ticks.x=element_blank(),axis.title.y=element_blank())+
coord_flip()+
theme(legend.position = "none")
})
此外,我们需要使用 unlab
删除标签,因为pivot_longer
太聪明了,忽略了组合 labelled
类的方法。
use_labels
只需用变量标签替换 data.frame 和表达式中的所有名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。