#r #ggplot2
#r #ggplot2
Вопрос:
Я создаю график, используя ggplot2
который принимает даты по оси x (т.е. 1000 лет назад) и вероятности по оси y. Я хотел бы различать разные периоды времени, затеняя области графика разными цветами. Я сохранил здесь следующие даты:
paleo.dates <- c(c(13500,8000), c(13500,10050) ,c(10050,9015),
c(9015,8000), c(8000,2500), c(8000,5500), c(5500,3500), c(3500,2500),
c(2500,1150), c(2500,2000), c(2000,1500), c(1500,1150), c(1150,500))
Я хотел бы взять период времени, скажем, от 13500 до 8000, и закодировать его цветом, пока он не перекрывается с другой датой, например, третьей записью.
Я использую ggplot2 cheatsheat, и я пытался использовать aes(fill = paleo.dates)
, но это не работает, поскольку это не та же длина, что и мой набор данных. Я также думал об использовании geom_rect()
для ручного заполнения областей, но это кажется не очень элегантным, и я не уверен, что это вообще сработает.
Любые советы приветствуются, спасибо.
Комментарии:
1. Что вы имеете в виду «пока оно не перекрывается с другой датой»? Разве вторая запись также не перекрывается с первой? Что происходит при этих перекрытиях? Должно быть легко изменить оттенок в зависимости от того, где дата попадает в набор взаимоисключающих диапазонов.
2. Да, даты в начале повсюду, я думал о том, чтобы сделать какой-то градиентный цвет для представления перекрытий, но не уверен, как это сделать. Как бы я изменил оттенок во взаимоисключающем диапазоне? использование geom_rect() не очень удовлетворяет, поэтому, если есть умный способ, который был бы аккуратным.
3. Создайте столбец, который определяет диапазон для каждой строки (например, используя case_when ), и заполните на основе этого столбца
Ответ №1:
Вам просто нужно создать подмножество периода. В этом случае я создал sub
вектор для преобразования в фактор для облегчения заливки.
library(dplyr)
library(ggplot2)
df <- data.frame(paleo.dates = seq(500, 13000, 100),
p = runif(n = length(seq(500, 13000, 100)),
0, 1))
sub <- data.frame(sub = rep(1:(13000/500), each = 5))
sub <- sub %>%
dplyr::slice(1:nrow(df))
df <- df %>%
dplyr::mutate(period = sub$sub,
period = as.factor(period))
ggplot2::ggplot(df)
geom_bar(aes(x = paleo.dates, y = p,
fill = period,
col = period),
show.legend = F, stat = "identity")
theme_bw()