Построение медианы рядом с несколькими линиями на линейном графике в R

У меня есть некоторые данные (температура для разных уровней заряда батареи) для пользователей мобильного приложения. Я хотел бы построить данные для каждого пользователя (все на однолинейном графике), а также медиану temp для аналогичных percentage для всех пользователей (на том же графике, выделив его более толстой линией). Я могу построить все линии, кроме медианы, используя ggplot2. Вот мой фиктивный файл данных (я могу изменить организацию/структуру данных или сгруппировать свои данные, если мне нужно):

userId, percentage, temp
11, 2, 32
11, 3, 32
11, 4, 33
11, 5, 33
11, 7, 34
11, 10, 30
12, 2, 30
12, 3, 30
12, 4, 30
12, 5, 30
12, 7, 34
12, 10, 32

Вот как я это делаю на данный момент:

library(ggplot2)
sampleDataFrame <- read.table(file.choose(), sep=",", header=T)
sampleDataFrame$userId <- factor(sampleDataFrame$userId)
p1 <- ggplot(sampleDataFrame, aes(x=percentage, y=temp, colour=userId)) + geom_line()
print(p1)

Вот результат:

линейный график


person Javad    schedule 10.01.2016    source источник
comment
Может быть, вы хотите что-то вроде + geom_hline(yintercept = mean(sampleDataFrame$temp), size=2) или + geom_hline(yintercept = aggregate(temp~userId, sampleDataFrame, mean)$temp, size=2)?   -  person lukeA    schedule 10.01.2016
comment
@lukeA Они производят только прямую горизонтальную линию с одним значением как среднее значение всех временных интервалов (я полагаю). Линия не колеблется, чтобы отразить изменения значения (для temp).   -  person Javad    schedule 10.01.2016
comment
Кстати, есть ли способ (например, функция median) вычислить медиану вместо среднего?   -  person Javad    schedule 10.01.2016
comment
В этом случае просто замените mean на median.   -  person lukeA    schedule 10.01.2016


Ответы (2)


Вы могли бы попробовать

# compute means per percentage-group:
sampleDataFrame$means <- with(sampleDataFrame, ave(temp, percentage, FUN=mean)) 
# plot
ggplot(sampleDataFrame, aes(x=percentage, y=temp, colour=userId)) + 
  geom_line() + 
  geom_line(aes(y=means), size=2, color="black")

введите здесь описание изображения

person lukeA    schedule 10.01.2016

Вместо вычисления новой переменной вы также можете использовать stat_summary:

ggplot(sampleDataFrame, aes(x=percentage, y=temp, colour=factor(userId))) + 
  geom_line() + 
  stat_summary(fun.y = "median", geom = "line", color = "black", size = 1.2)

который дает:

введите здесь описание изображения

person Jaap    schedule 10.01.2016