У меня есть фрейм данных, и мне интересно, как построить линию, используя «max» (красным) с заполненной областью (синим цветом), а затем добавить вторую строку, используя «min» (зеленым цветом). Большое спасибо. Ось X - это «х».
df <- data.frame(
x = c("Jan","Feb","Mar","April","May","June","July"),
max = c(100,150,200,300,80,130,50),
min = c(30,20,40,25,15,10,8))
Я пробовал следующий код:
df$x = 1:7
ggplot(df, aes(x)) +
geom_line(aes(y = max), color="red") +
geom_area() +
geom_line(aes(y = min), color = "blue")
Но возникает ошибка: Error in eval(expr, envir, enclos) : object 'y' not found
2 ответа
Может быть, вы ищете geom_ribbon
:
df <- data.frame(
x = c("Jan","Feb","Mar","April","May","June","July"),
max = c(100,150,200,300,80,130,50),
min = c(30,20,40,25,15,10,8))
df$xpos <- seq_len(nrow(df))
ggplot(df, aes(x = xpos)) +
geom_ribbon(aes(ymin = min, ymax = max), fill = 'blue') +
geom_line(aes(y = max), color = 'red') +
geom_line(aes(y = min), color = 'green') +
scale_x_continuous(breaks = df$xpos, labels = df$x)
Если вы хотите начать первую точку данных и удалить лишний пробел с левого конца, вы можете установить expand = c(0, 0)
. Однако вам также необходимо расширить правый предел вручную, чтобы избежать обрезки метки x.
ggplot(df, aes(x = xpos)) +
geom_ribbon(aes(ymin = min, ymax = max), fill = 'blue') +
geom_line(aes(y = max), color = 'red') +
geom_line(aes(y = min), color = 'green') +
scale_x_continuous(breaks = df$xpos, labels = df$x,
expand = c(0, 0), limits = c(1, 7.2))
Один из вариантов - превратить x
в фактор с уровнями в правильном порядке и установить эстетику группы:
library(ggplot2)
df = data.frame(x = c("Jan","Feb","Mar","April","May","June","July"),
max = c(100,150,200,300,80,130,50),
min = c(30,20,40,25,15,10,8))
df$x <- factor(df$x, df$x, ordered = TRUE)
ggplot(df, aes(x, ymin = min, ymax = max, group = 1)) +
geom_ribbon(fill = 'steelblue3', alpha = 0.5) +
geom_line(aes(y = min), color = 'green3') +
geom_line(aes(y = max), color = 'red2')
Более надежный вариант - проанализировать x
в классе Date, чтобы метки оси X генерировались автоматически:
df = data.frame(x = c("Jan","Feb","Mar","April","May","June","July"),
max = c(100,150,200,300,80,130,50),
min = c(30,20,40,25,15,10,8))
df$x <- as.Date(paste(substr(df$x, 1, 3), '01 2017'), format = '%b %d %Y')
ggplot(df, aes(x, ymin = min, ymax = max)) +
geom_ribbon(fill = 'steelblue3', alpha = 0.5) +
geom_line(aes(y = min), color = 'green3') +
geom_line(aes(y = max), color = 'red2')
Дальнейшие разрывы или альтернативное форматирование можно добавить с помощью scale_x_date
.
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.