ggplot с ожиданием направления и ожиданием встреч

#r #ggplot2 #line-plot

Вопрос:

У меня есть база данных из 350 пациентов с их доходом, временем, в течение которого они ждали направления, и временем, в течение которого они ждали приема. Это имитирует данные:

 set.seed(1)
income<-sort(rep(seq(10,105,5),20))
referral<-runif(400,10,20) income
appointment<-referral runif(400,10,20) income

df<-data.frame(cbind(income,referral,appointment))

df<-df[order(df$income,df$referral),]

 

Мне бы хотелось, чтобы на оси x был график дохода, одно наблюдение на пациента, а на оси y линия, которая начинается во время направления и заканчивается во время первого приема. Я не знаю, как называется этот сюжет (высокий-низкий?) но я высмеял то, как я хотел бы, чтобы это выглядело ниже.

макет регулярного сюжета

Может ли кто-нибудь предложить какой-нибудь код ggplot, который поможет мне создать мой сюжет? Спасибо.

Ответ №1:

От geom_segment() слоя трудно увернуться, так как он будет уклоняться только от одной из двух позиций x. Вместо этого я рекомендую рассчитать правильное уклонение перед построением графика.

 library(ggplot2)

set.seed(1)
income<-sort(rep(seq(10,105,5),20))
referral<-runif(400,10,20) income
appointment<-referral runif(400,10,20) income

df<-data.frame(cbind(income,referral,appointment))

df<-df[order(df$income,df$referral),]

# Calculate dodges
dodge_width <- 0.8
df$dodge <- unlist(lapply(split(df$income, df$income), function(x) {
  seq(-0.5 * dodge_width, 0.5 * dodge_width, length.out = length(x))
}))

# Convert to pseudo-discrete position
df$position <- match(df$income, sort(unique(df$income)))

ggplot(df)  
  geom_segment(
    aes(x = position   dodge, xend = position   dodge, 
        y = referral, yend = appointment, group = seq_along(income),
        colour = income))  
  scale_x_continuous(
    breaks = df$position[!duplicated(df$position)],
    labels = df$income[!duplicated(df$position)]
  )  
  scale_colour_gradientn(
    colours = c("red", "yellow", "green")
  )
 

Создано 2021-09-07 пакетом reprex (v2.0.1)

Ответ №2:

в соответствии с чем должна быть выполнена раскраска ? Я предполагал доход.

 df %>%
ggplot(aes(x=income,y=referral,color=(income),group = income)) 
scale_color_gradient2(low = "darkred", mid = "red", high = "green") 
geom_line()
 

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

Комментарии:

1. Спасибо. Цвет — по доходу. Как используется время встречи в вашем решении? Если используется назначение, то каждая строка будет переменной по длине. Также я ожидал 400 строк.