使用带有 ggplot2、dplyr 和 forcats 的自定义函数绘制降频条形图
Plot a descending frequency bar chart using a custom function with ggplot2, dplyr, and forcats
我有很多数据需要创建按降序排列的条形图。如果我在函数外部执行此操作,此 post 中显示的解决方案有效,但在函数内部使用时无效。
这是一个用例。
library(forcats)
library(tidyverse)
dat <- data.frame(
x = rep(letters[1:5], times=c(3,11,8, 2, 7))
)
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(group, quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}
plot_freq(dat, x, n=5)
我还能用 plot_freq
做什么来达到我想要的结果?
dat %>% count(x) %>% top_n(5) %>% mutate(x = fct_reorder(x, n)) %>%
ggplot(., aes(x, n)) + geom_bar(stat = 'identity') + coord_flip()
您可以相应地更改函数 plot_freq
将group
改为quo(group)
,类似于y
审美:
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(x=quo(group), y=quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}
plot_freq(dat, x, n=5)
两种解决方案。
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(y=quo(n))) +
geom_bar(aes(group),stat = "identity") +
coord_flip()
}
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(quo(group),quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}
我有很多数据需要创建按降序排列的条形图。如果我在函数外部执行此操作,此 post 中显示的解决方案有效,但在函数内部使用时无效。
这是一个用例。
library(forcats)
library(tidyverse)
dat <- data.frame(
x = rep(letters[1:5], times=c(3,11,8, 2, 7))
)
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(group, quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}
plot_freq(dat, x, n=5)
我还能用 plot_freq
做什么来达到我想要的结果?
dat %>% count(x) %>% top_n(5) %>% mutate(x = fct_reorder(x, n)) %>%
ggplot(., aes(x, n)) + geom_bar(stat = 'identity') + coord_flip()
您可以相应地更改函数 plot_freq
将group
改为quo(group)
,类似于y
审美:
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(x=quo(group), y=quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}
plot_freq(dat, x, n=5)
两种解决方案。
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(y=quo(n))) +
geom_bar(aes(group),stat = "identity") +
coord_flip()
}
plot_freq <- function(data, group, n=10){
group <- enquo(group)
data %>%
count(!!group) %>%
top_n(n) %>%
mutate(group := fct_reorder(!!group, n)) %>%
ggplot(., aes_(quo(group),quo(n))) +
geom_bar(stat = "identity") +
coord_flip()
}