R ggplot geom_text 审美长度
R ggplot geom_text Aesthetic Length
我正在处理一个非常大的数据集,其中包含一个虚拟变量和一个具有 14 个水平的因子变量——我已经发布了一个示例 here。我正在尝试使用以下代码制作堆叠比例条形图:
ggplot(data,aes(factor(data$factor),fill=data$dummy))+
geom_bar(position="fill")+
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
效果很好,几乎我需要的情节。我只想添加小文本标签来报告每个因子水平的观察次数。我的直觉告诉我这样的事情应该可行
Labels<-c("n=1853" , "n=392", "n=181" , "n=80", "n=69", "n=32" , "n=10", "n=6", "n=4", "n=5", "n=3", "n=3", "n=2", "n=1" )
ggplot(data,aes(factor(data$factor),fill=data$dummy))+
geom_bar(position="fill")+
geom_text(aes(label=Labels,y=.5))+
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
但它吐出一个空白图表和错误
Aesthetics must either be length one, or the same length as the dataProblems:Labels
这对我来说真的没有意义,因为我知道我的因子水平的长度与我强加的标签数量的长度相同。我一直在努力弄清楚我是如何做到的可以让它只打印我需要的东西,而无需像 this example 这样的观察次数创建值向量,但无论我尝试什么,我总是得到相同的美学错误。
这个怎么样:
library(dplyr)
# Create a separate data frame of counts for the count labels
counts = data %>% group_by(factor) %>%
summarise(n=n()) %>%
mutate(dummy=NA)
counts$factor = factor(counts$factor, levels=0:10)
ggplot(data, aes(factor(factor), fill=factor(dummy))) +
geom_bar(position="fill") +
geom_text(data=counts, aes(label=n, x=factor, y=-0.03), size=4) +
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
你的方法是对的,但是Labels
需要是数据框,而不是向量。 geom_text
需要使用 data
参数给出数据框的名称。然后,aes
中的 label
参数告诉 geom_text
哪一列用于标签。此外,即使 geom_text
不使用 dummy
列,它也必须在数据框中,否则你会得到一个错误。
我正在处理一个非常大的数据集,其中包含一个虚拟变量和一个具有 14 个水平的因子变量——我已经发布了一个示例 here。我正在尝试使用以下代码制作堆叠比例条形图:
ggplot(data,aes(factor(data$factor),fill=data$dummy))+
geom_bar(position="fill")+
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
效果很好,几乎我需要的情节。我只想添加小文本标签来报告每个因子水平的观察次数。我的直觉告诉我这样的事情应该可行
Labels<-c("n=1853" , "n=392", "n=181" , "n=80", "n=69", "n=32" , "n=10", "n=6", "n=4", "n=5", "n=3", "n=3", "n=2", "n=1" )
ggplot(data,aes(factor(data$factor),fill=data$dummy))+
geom_bar(position="fill")+
geom_text(aes(label=Labels,y=.5))+
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
但它吐出一个空白图表和错误
Aesthetics must either be length one, or the same length as the dataProblems:Labels
这对我来说真的没有意义,因为我知道我的因子水平的长度与我强加的标签数量的长度相同。我一直在努力弄清楚我是如何做到的可以让它只打印我需要的东西,而无需像 this example 这样的观察次数创建值向量,但无论我尝试什么,我总是得到相同的美学错误。
这个怎么样:
library(dplyr)
# Create a separate data frame of counts for the count labels
counts = data %>% group_by(factor) %>%
summarise(n=n()) %>%
mutate(dummy=NA)
counts$factor = factor(counts$factor, levels=0:10)
ggplot(data, aes(factor(factor), fill=factor(dummy))) +
geom_bar(position="fill") +
geom_text(data=counts, aes(label=n, x=factor, y=-0.03), size=4) +
ylab("Proportion")+
theme(axis.title.y=element_text(angle=0))
你的方法是对的,但是Labels
需要是数据框,而不是向量。 geom_text
需要使用 data
参数给出数据框的名称。然后,aes
中的 label
参数告诉 geom_text
哪一列用于标签。此外,即使 geom_text
不使用 dummy
列,它也必须在数据框中,否则你会得到一个错误。