我有一个像这样创建的ggplot2点图表
qplot(Index, Popularity ,data = data.slopeone.agg)
现在我想在所有数据点的一半添加一条垂直线。换句话说,积分是0.5。我想添加这一行,看看数据部分是50%。
我怎样才能在R中实现这一目标?我知道geom_vline
,但不知道如何确定vline的位置。
数据的结构如下: 每一行都有一个ItemId,这个项目的受欢迎程度和我的图表的索引,用于显示按人气排序的值。
head(data.slopeone.agg)
Item Popularity Index
184 258 0.07695880 1
29 50 0.07294129 2
121 181 0.07162558 3
203 286 0.07030986 4
225 313 0.06500478 5
65 100 0.06366796 6
答案 0 :(得分:1)
p <- qplot(data=data.slopeone.agg, x = Index, y = Popularity )
现在识别中值人气价值的“指数”。 请注意,如果存在偶数个观察值,则中位数不会有效。
attach(data.slopeone.agg)
获得人口中位数观察值
medpop=sort(Popularity)[floor(length(Popularity)/2)]
获取该值的索引
lineplace= Index[which(Popularity==medpop)]
detach(data.slopeone.agg)
p + geom_vline(xintercept = lineplace)
答案 1 :(得分:0)
我现在发现了如何解决我的问题。也许这不是最优雅的方式:
getPopularityVLineIndex = function(popData){
halfPopularity = sum(popData$Popularity) / 2
# initialize helper variables
fiftyPercent = 0;
counter = 1;
# sum up the popularity values until the half of the sum is reached
while (fiftyPercent < halfPopularity) {
fiftyPercent = fiftyPercent + popData$Popularity[which(popData$Index == counter)]
counter = counter + 1
}
# the current counter value is the position of the vertical line
vLineIndex = counter
return (vLineIndex)
}
qplot(Index, Popularity ,data = popData) + geom_vline(xintercept = getPopularityVLineIndex(popData), colour="red", linetype = "longdash"))
如果有人知道更优雅的方式,请随意发布。但也许我的问题现在更容易理解;)