Объединение двух переменных ggplot: geom_pointrange и geom_point

Я пытаюсь объединить на одном графике две переменные, одну как geom_pointrange [потому что мне нужно минимальное и максимальное представление (доверительный интервал 2,5% и 97,5% и его медиана (50%)]

другая переменная - geom_point, созданная медианой другого исчисления.

Я обнаружил, что ggplot делает эти представления, но я не собрал их вместе:

#inputs
x <- seq(1:10)
n <- length(x)
yone <- 2 * runif(n)
ytwo <- runif(n)
ythree <- ytwo * 0.2
yfour <- ytwo * 2

df <- data.frame(x, yone, ytwo, ythree, yfour); df


library (ggplot2)

#yone and ytwo must be points
#ythree and yfour are min and max confidence interval (vertical line)

ggplot(df, aes(x, y = value, color = variable)) + 
geom_pointrange(aes(ymin = ythree, ymax = yfour)) + 
geom_point(aes(y = yone, col = "yone")) +
geom_point(aes(y = ytwo, col = "ytwo")) +
geom_line(aes(y = yfour))

Может ли кто-нибудь мне помочь?


person Rafael-Pedrollo-de-Paes    schedule 13.04.2017    source источник
comment
Как должен выглядеть результат? Можете ли вы указать нам на похожий рисунок? Кроме того, прямо сейчас ваш пример не работает, поскольку набор данных, который вы предоставляете, не содержит value или variable.   -  person aosmith    schedule 14.04.2017


Ответы (1)


Вот одно из возможных решений, чтобы получить тот тип сюжета, к которому вы, кажется, стремитесь. Я использовал пакет reshape2, чтобы преобразовать ваши данные в длинную форму. Есть много вариантов изменения формы, включая tidyr (сборка), базовый R (изменение формы) и data.table (плавление). Для yone строк в расплавленном data.frame я установил доверительные интервалы равными NA, поскольку вы их не вычисляли. Наконец, я использовал geom_linerange вместе с geom_point вместо geom_pointrange, чтобы изящно обрабатывать значения NA.

library(ggplot2)
library(reshape2)

# Reshape data to long form.
mdat <- melt(df, id.vars=c("x", "ythree", "yfour"))

# Set confidence intervals to NA for yone values,
# values for which you didn't compute CIs.
mdat[mdat$variable == "yone", c("ythree", "yfour")] <- NA

p = ggplot(data=mdat, aes(x=x, y=value, colour=variable, ymin=ythree, ymax=yfour)) + 
    geom_linerange() + 
    geom_point(size=3) +
    geom_line(aes(y=yfour), linetype="dotted")

ggsave ("plot.png", p, height=4, width=6, dpi=150)

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

person bdemarest    schedule 14.04.2017