2012-04-03 2 views
1

У меня есть график точки ggplot2 созданных как этотдобавить вертикальную линию 50% к точке 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 

мой график выглядит следующим образом: http://img838.imageshack.us/img838/3194/popt.png

+0

Я не знаю, какую структуру data.slopeone.agg занимает. Можете ли вы включить небольшой образец? – Seth

+1

, возможно, используя «медианный»? – James

ответ

0

теперь я узнал, как решить мою проблему. Может быть, это не самый элегантный способ:

определить функцию, чтобы получить 50% от данных популярности Вер.пол. линии

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")) 

Если кто-то знает более изящный способ, не стесняйтесь отправлять его. Но, может быть, мой вопрос теперь более понятен;)

1
p <- qplot(data=data.slopeone.agg, x = Index, y = Popularity) 

Теперь Идентифицировать "Index" медианного значения популярности. Обратите внимание, что медиана плода не будет работать, если есть четное число наблюдений.

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) 
+0

Что должно быть «wt»? –

+0

Извините, я исправил свой ответ. Я думаю, что вы хотите медиану переменной x, поэтому «Индекс» в вашем случае. – Seth

+0

no @Seth Мне не нужна строка в 50% от индекса. Мне нужна линия в том месте, где интеграл ниже кривой равен 0,5. это не то же самое. Взгляните на графический график, который я опубликовал –

Смежные вопросы