尝试从 ggplot 上的 expss 包实现 use_labels
Trying to implement use_labels from expss package on a ggplot
我有一个数据框,我使用 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", class = c("labelled",
"numeric")), Q1_Gender_2 = structure(0.89, label = "Female", class = c("labelled",
"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", class = c("labelled",
"numeric")), Q1_Gender_2 = structure(0.89, label = "Female", class = c("labelled",
"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
class.
的方法
use_labels
只需用变量标签替换 data.frame 和表达式中的所有名称。
我有一个数据框,我使用 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", class = c("labelled",
"numeric")), Q1_Gender_2 = structure(0.89, label = "Female", class = c("labelled",
"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", class = c("labelled",
"numeric")), Q1_Gender_2 = structure(0.89, label = "Female", class = c("labelled",
"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
class.
use_labels
只需用变量标签替换 data.frame 和表达式中的所有名称。