Изменение цвета точки ggplot2 на основе даты, происходящей менее чем через 4 недели после предыдущей даты - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть примерный фрейм данных, состоящий из: примерный фрейм данных

Я использовал ggplot2 для построения дат на оси X с подсчетом на оси Y:

df_ggplot <- read.csv("ggplot_ex.csv", header = T, na.strings = "", fileEncoding = "UTF-8-BOM")

df_ggplot$Date <- mdy(df_ggplot$Date)

df_ggplot$Ccount <- as.numeric(as.character(df_ggplot$Ccount))

ggplot(df_ggplot, aes(x=Date, y = Ccount)) +
  geom_line() + 
  geom_point()

ggplot ex output

Я хочу, чтобы точки, которые появляются менее чем через 4 недели после того, как предыдущая точка стала красной. Кто-нибудь может помочь? В этом примере вторая точка будет красной, поскольку она появляется примерно через 2 недели после предыдущей.

1 Ответ

0 голосов
/ 08 февраля 2020

Вы, вероятно, должны выполнить вычисления в кадре данных перед графиком (убедитесь, что ваш столбец Date имеет правильный формат date).
Один вариант, который вы можете попробовать:

df_ggplot <- df_ggplot %>% 
  mutate(time_diff = difftime(time1 = Date, time2 = lag(x = Date, n = 1), units = "weeks"),
         is_red = as.factor(time_diff < 4))

даст вам очки, которые необходимо пометить.

        Date Ccount      time_diff is_red
1 2019-08-17  20000       NA weeks   <NA>
2 2019-08-30  15000 1.857143 weeks   TRUE
3 2019-09-30  25000 4.285714 weeks  FALSE

Затем вы можете построить, используя несколько цветов, которые вы хотите.

ggplot(df_ggplot, aes(x = Date, y = Ccount)) +
  geom_line() +
  geom_point(aes(color = is_red)) +
  scale_color_manual(values = c("black", "red"), na.value = "black")
...