我正在处理一个非常大的数据集,其中包含一个虚拟变量和一个具有14个级别的因子变量 - 我发布的样本here。我正在尝试使用以下代码制作堆积比例条形图:
.then(function (listaUsuarios){
var argsVisit;
console.log({ $match : { "createdAt" : { $gte: "2015-01-10T00:00:00.000Z", $lt: "2015-07-01T00:00:00.000Z" }} },
{ $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } }, "visitas" : { $sum : 1 } } });
Visita.aggregate({ $match : { "createdAt" : { $gte: "2015-01-10T00:00:00.000Z", $lt: "2015-07-01T00:00:00.000Z" }} },
{ $group : { _id : { "usuario" : listaUsuarios , "dia" : { $dayOfMonth : "$createdAt" } }, "visitas" : { $sum : 1 } } })
.exec(function (err, results) {
if (err) {
console.log("Erro!!!");
deferredDados.reject({
error: 500,
message: 'Erro buscando Visita, erro: '+err
});
} else {
if (!results || results.length == 0) {
console.log("Sem retorno!!!");
deferredDados.resolve( [0,0,0,0,0,0,0] ); //Tudo zerado poruqe não há retorno.
//deferredDados.resolve(0);
deferredDados.reject({
error: 500,
message: 'Erro buscando Visitas, não achou resultados'
});
} else {
console.log("Dados"+results);
deferredDados.resolve( results );
//deferredDados.resolve( results.data] );
}
}
});
return deferredDados.promise;
})
效果很好,几乎我需要的情节。我只想添加小文本标签,报告每个因子级别的观察数量。我的直觉告诉我这样的事情应该有用
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))
这对我来说真的没有意义,因为我知道我的因子水平的长度和我肌肉发达的标签数量的长度相同。我一直想弄清楚我怎么能得到它只是打印我需要的东西而不创建像this example这样的观察数量的值向量,但无论我尝试什么,我总会得到相同的美学错误。
答案 0 :(得分:3)
这个怎么样:
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
指定数据框的名称。然后,label
中的aes
参数告诉geom_text
哪个列用于标签。此外,即使geom_text
没有使用dummy
列,它也必须位于数据框中,否则您将收到错误。