Использование geom_line и geom_point для разных рядов в одном фасете

Я использую ggplot2 для создания графика, подобного следующему:

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

Проблема, с которой я сталкиваюсь, заключается в объединении точек и линий в верхней грани. Как и на изображении, я хочу, чтобы средства были представлены линиями, а данные точками.

Я могу создавать линии как для средних значений, так и для данных, используя geom_line и помещая средние значения и данные в одну группу, а вероятности в другую, как показано здесь:

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

Но я не могу совмещать линии и точки в одной грани. Из-за этого я не переделывал представленные ниже данные и не группировал их.

years <- c(1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969)
a.data <- c(0.105, 0.075, 0.107, 0.112, 0.116, 0.062, 0.044, 0.073)
b.data <- c(-0.039, -0.022, -0.070, -0.062, -0.067, -0.065, -0.023, -0.015)
a.mean <- c(0.0893, 0.0893, 0.0893, 0.0893, 0.0893, 0.0763, 0.0757, 0.0757)
b.mean <- c(-0.040, -0.040, -0.040, -0.040, -0.040, -0.030, -0.029, -0.029)
prob <- c(0.0, 0.0, 0.0, 0.0, 0.348 0.020, 0.002, 0.0)

Будем очень благодарны любой помощи.


person minsky_iww    schedule 23.01.2019    source источник
comment
Когда вы говорите, что не можете комбинировать линии и точки в одном аспекте, вы имеете в виду, что пытались, но безуспешно? Если да, то что вы пробовали и с какими проблемами столкнулись?   -  person phalteman    schedule 23.01.2019


Ответы (1)


Пытаясь решить вашу проблему, я нахожу способ сделать график не с разными гранями, а с двумя графиками в одной сетке, используя пакет gridExtra.

Как видите, мне пришлось восстанавливать данные в разных объектах, чтобы выполнить каждую часть графика.

resulting_plot

library(tidyverse)
library(gridExtra)

data <- data.frame(
        years = c(1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),
        a.data = c(0.105, 0.075, 0.107, 0.112, 0.116, 0.062, 0.044, 0.073),
        b.data = c(-0.039, -0.022, -0.070, -0.062, -0.067, -0.065, -0.023, -0.015),
        a.mean = c(0.0893, 0.0893, 0.0893, 0.0893, 0.0893, 0.0763, 0.0757, 0.0757),
        b.mean = c(-0.040, -0.040, -0.040, -0.040, -0.040, -0.030, -0.029, -0.029),
        prob = c(0.0, 0.0, 0.0, 0.0, 0.348, 0.020, 0.002, 0.0)
        )


        data_points <- data %>% select(a.data, b.data, years) %>% gather(key = "a_b", value = "data", -years)
        data_lines <- data %>% select(a.mean, b.mean, years) %>% gather(key = "a_b", value = "mean", -years)


        p1 <- ggplot(data_points) +
          geom_point(aes(x = years, y = data, color = factor(a_b))) +
          geom_line(data = data_lines, aes(x = years, y = mean, color = factor(a_b))) +
          theme(legend.position = "none")

         p2 <- ggplot(data) + geom_line(aes(x = years, y = prob))


        grid.arrange(p1, p2)
person Johan Rosa    schedule 23.01.2019