微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试从 ggplot 上的 expss 包中实现 use_labels

如何解决尝试从 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 举报,一经查实,本站将立刻删除。