我想为条形图创建一个函数,其中包含带有相应百分比的标签。
以下代码创建了我希望看到的条形图:
percentData <- df %>%
group_by(col1) %>%
count(col2) %>%
mutate(ratio=scales::percent(n/sum(n)))
diagram <- ggplot(df, aes(x=col1, fill=col2))
geom_bar(position = "fill")
geom_text(data=percentData, aes(y=n,label=ratio),
position=position_fill(vjust=0.5))
我想为上面的条形图创建一个函数,以便能够更改df
,col1
和col2
。
我尝试了以下操作:
newdiagram <- function(data, col1, col2){
percentData <- data %>%
group_by(col1) %>%
count(col2) %>%
mutate(ratio=scales::percent(n/sum(n)))
diagram <- ggplot(data, aes(x=col1, fill=col2))
geom_bar(position = "fill")
geom_text(data=percentData, aes(y=n,label=ratio),
position=position_fill(vjust=0.5))
return(diagram)
}
newdiagram(df, column1, column2)
不幸的是,我收到错误消息,列不明。我试图通过用data$col1
指定列来解决它,但这也不起作用。
答案 0 :(得分:0)
由于您未提供任何示例数据,因此我无法将其转换为100%的百分比可以解决此问题,但是一般来说,如果您想使用字符串来查找数据框的一列,那将是正确的语法:
data[[col1]]
这意味着它应该对您有用:
newdiagram <- function(data, col1, col2){
percentData <- data %>%
group_by(data[[col1]]) %>%
count(data[[col2]]) %>%
mutate(ratio=scales::percent(n/sum(n)))
diagram <- ggplot(data, aes(x=col1, fill=col2))
geom_bar(position = "fill")
geom_text(data=percentData, aes(y=n,label=ratio),
position=position_fill(vjust=0.5))
return(diagram)
}
newdiagram(df, column1, column2)
此外,您还可以通过以下方式提供可重复性的简约数据集:
head(data)
答案 1 :(得分:0)
我建议您将百分比的计算和视觉效果的构建分为两个独立的函数。这样更容易发现错误。
使用称为大括号的语法将对此有所帮助:
{{ }}
计算百分比
library(tidyverse)
library(magrittr)
percentData_calculation <- function(col1){
group_by({{col1}}) %>%
count({{col1}}) %>%
mutate(ratio = scales::percent(n/sum(n)))}
建立视觉效果
newdiagram <- function(df, col1, col2){
percentData_calculation({{col1}}) %>%
ggplot({{df}}, aes(x={{col1}},y={{col2}}) +
geom_bar(postion = fill) +
geom_text(., aes(y = n , label = ration),
postion = postion_fill(vjust = 0.5)
在geom_text中,您无需命名数据源,因为它来自计算。另外,如果您知道ggplot的某些方面不会改变,例如df,则无需将其放置在函数中。
希望获得帮助!