#r #ggplot2 #plot #graph
#r #ggplot2 #график #График
Вопрос:
ПОСТАНОВКА ЗАДАЧИ
Мой набор данных содержит 100 групп, каждая из которых может быть отображена в виде линии с аналогичной формой по отношению к переменной ответа. Я хотел бы создать график, на котором все пространство, занимаемое 100 изогнутыми линиями, превращается в заштрихованную область, поэтому легче показать изменение переменной ответа во всех группах. Это также позволит четко видеть значения или интервалы по оси x, где переменная ответа имеет меньшую вариацию (заштрихованная область будет уже, поскольку большинство строк будут перекрываться) или большую вариацию.
ПРИМЕР КОДА
library(tidyverse)
library(ggplot2)
set.seed(1)
# Produce a similar table to the real one
example <- tibble(values = seq(0, 10, 0.1),
sine1 = sin(values 0.2),
sine2 = sin(values - 0.2),
sine3 = sin(values 0.4) 0.2,
sine4 = sin(values - 0.4) - 0.2,
sine5 = sin(values - 0.4) 0.2,
sine6 = sin(values - 0.2) 0.4) %>%
pivot_longer(-values) # final format with 3 columns
# Create a line graph, where each line represents a different sine curve
graph1 <- ggplot(example, aes(x = values, y = value, col = name))
geom_line(size = 3, show.legend = FALSE, alpha = 0.5)
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black"))
graph1
ВОПРОС
Есть ли способ перейти от этого графика…
к этому (или подобному)? Примечание: толстая черная линия не является строго необходимой
Ответ №1:
Вам просто нужно сгруппировать в отдельную единицу времени и вычислить минимальные / максимальные значения. Это позволяет построить geom_ribbon
:
example %>%
group_by(values) %>%
summarize(min = min(value), max = max(value)) %>%
ggplot()
geom_ribbon(aes(x = values, ymin = min, ymax = max), size = 2,
fill = "#29c8e5", color = "black")
theme_classic()
Если вы предпочитаете, чтобы лента перекрывала ваш исходный график, вы могли бы сделать:
ribbon <- example %>%
group_by(values) %>%
summarize(min = min(value), max = max(value))
graph1
geom_ribbon(aes(x = values, ymin = min, ymax = max),
data = ribbon, size = 0, fill = "#29c8e5",
color = NA, alpha = 0.3, inherit.aes = FALSE)
Как бы то ни было, я думаю, что первый вариант более визуально эффектен.
Комментарии:
1. Именно то, что я искал.! Большое вам спасибо. Я согласен, что первый вариант более яркий и более четко передает мое сообщение.