我有一个包含用户ID和他们创建的对象数量的数据集。我使用ggplot绘制直方图,现在我试图将x值的累积和包括为一条线。目的是看到很多箱子对总数有贡献。我尝试了以下方法:
ggplot(data=userStats,aes(x=Num_Tours)) + geom_histogram(binwidth = 0.2)+
scale_x_log10(name = 'Number of planned tours',breaks=c(1,5,10,50,100,200))+
geom_line(aes(x=Num_Tours, y=cumsum(Num_Tours)/sum(Num_Tours)*3500),color="red")+
scale_y_continuous(name = 'Number of users', sec.axis = sec_axis(~./3500, name = "Cummulative percentage of routes [%]"))
这不起作用,因为我没有包含任何箱子,所以情节
和
ggplot(data=userStats,aes(x=Num_Tours)) + geom_histogram(binwidth = 0.2)+
scale_x_log10(name = 'Number of planned tours',breaks=c(1,5,10,50,100,200))+
stat_bin(aes(y=cumsum(..count..)),binwidth = 0.2, geom="line",color="red")+
scale_y_continuous(name = 'Number of users', sec.axis = sec_axis(~./3500, name = "Cummulative percentage of routes [%]"))
结果如下: 。
这里考虑了伯爵的计数。我想要的是bin的count *值的cumsum。然后它应该被标准化,以便它可以在一个图中显示。我想要的是这样的:
我很感激任何输入!感谢
修改 作为测试数据,这应该有效:
userID <- c(1:100)
Num_Tours <- sample(1:100,100)
userStats <- data.frame(userID,Num_Tours)
userStats$cumulative <- cumsum(userStats$Num_Tours/sum(userStats$Num_Tours))
答案 0 :(得分:1)
以下是一个可能对您有所帮助的说明性示例。
set.seed(111)
userID <- c(1:100)
Num_Tours <- sample(1:100, 100, replace=T)
userStats <- data.frame(userID, Num_Tours)
# Sorting x data
userStats$Num_Tours <- sort(userStats$Num_Tours)
userStats$cumulative <- cumsum(userStats$Num_Tours/sum(userStats$Num_Tours))
library(ggplot2)
# Fix manually the maximum value of y-axis
ymax <- 40
ggplot(data=userStats,aes(x=Num_Tours)) +
geom_histogram(binwidth = 0.2, col="white")+
scale_x_log10(name = 'Number of planned tours',breaks=c(1,5,10,50,100,200))+
geom_line(aes(x=Num_Tours,y=cumulative*ymax), col="red", lwd=1)+
scale_y_continuous(name = 'Number of users', sec.axis = sec_axis(~./ymax,
name = "Cumulative percentage of routes [%]"))