如何对图例进行列绑定到ggplot2中的计算列?

该代码使用每周计算的回归线绘制数据。 我想将图例与每周加倍时间结合起来,该时间是根据每周的坡度计算的。

很好解决问题:我可以通过geom_smooth获得每周回归线。 但是,我无法从geom_smooth中提取斜率系数(以计算倍增时间)。因此,我不得不在ggplot部分之外进行等效回归。
有什么建议可以更优雅地做到这一点吗?

主要问题:如何将图例与计算的倍增时间列结合? 摆弄很多东西,我可以将图例放在这些计算的倍增时间旁边。 它看起来不太好,当我包含另一个数据点时,我必须再次重新摆弄。建议将不胜感激。谢谢。

library(ggplot2)
library(gridExtra)

# Input data: Daily number of cases starting at day0 
cases <- c(1,1,2,3,7,10,13,16,24,38,51,62,85,116,150,202,240,274,402,554,709,927) 
day0 <- as.Date("2020-03-04")

# actual dates by counting from day0
dates <- day0 + 1:length(cases) 

# week number as factor to obtain regression line for each week
week <- as.factor(1 + (1:length(cases) ) %/% 7)

# tibble with daily data,also with week number 
datatib <- tibble( dates,cases,week)

# tibble with computed doubling time per week
resulttib <- tibble(Week=unique(week),Doubling_Time=NA)

# linear regression on log of dependent variable
for (wk in unique(week) ) {
  resulttib[wk,'Doubling_Time'] <- 
    round( log(2) / lm(log(cases) ~ dates,data=datatib[week==wk,] )$coef['dates'],2 )
}

# insert row at top for second line of column heading
resulttib <- add_row(resulttib,Week = '',Doubling_Time = '(days)',.before = 1) 

doublingtime = tableGrob(resulttib[,'Doubling_Time'],rows=NULL)

gp <- 
  ggplot(datatib,aes(dates,color = week ) ) +
  geom_point() +
  geom_smooth( method = "lm",se = FALSE) +
  scale_x_date() +
  scale_y_continuous(trans="log10") +
  labs(x = "",y = "Number of Cases") +
  ggtitle("Number of Cases with Weekly Doubling Times") +
  theme(plot.title = element_text(hjust = 0.5)) +

  theme(legend.position=c(0.75,0),legend.justification=c(1.2,-0.1),legend.text=element_text(size=14) ) +
  annotation_custom( doublingtime,xmin=dates[length(cases)]-2,xmax=dates[length(cases)],ymin=-2.65 )

如何对图例进行列绑定到ggplot2中的计算列?

djdz123 回答:如何对图例进行列绑定到ggplot2中的计算列?

作为主要问题的答案,请尝试此操作。我只是将倍增时间添加到您的主df中,并创建了一个新的var,结合了no。周和两倍的时间。然后将颜色映射到该新变量上。

关于第二个问题:有多种方法可以根据geom_smooth / stat_smooth的计算值来计算斜率。但是,我认为您计算坡度的方法是解决您要解决的问题的简便方法。

library(ggplot2)
library(dplyr)
library(gridExtra)

# Input data: Daily number of cases starting at day0 
cases <- c(1,1,2,3,7,10,13,16,24,38,51,62,85,116,150,202,240,274,402,554,709,927) 
day0 <- as.Date("2020-03-04")

# actual dates by counting from day0
dates <- day0 + 1:length(cases) 

# week number as factor to obtain regression line for each week
week <- as.factor(1 + (1:length(cases) ) %/% 7)

# tibble with daily data,also with week number 
datatib <- tibble( dates,cases,week)

# tibble with computed doubling time per week
resulttib <- tibble(Week=unique(week),Doubling_Time=NA)

# linear regression on log of dependent variable
for (wk in unique(week) ) {
  resulttib[wk,'Doubling_Time'] <- 
    round( log(2) / lm(log(cases) ~ dates,data=datatib[week==wk,] )$coef['dates'],2 )
}

# insert row at top for second line of column heading
#resulttib <- add_row(resulttib,Week = '',Doubling_Time = '(days)',.before = 1) 

#doublingtime = tableGrob(resulttib[,'Doubling_Time'],rows=NULL)

datatib1 <- datatib %>% 
  left_join(resulttib,by = c("week" = "Week")) %>% 
  mutate(week1 = paste0(week," (",Doubling_Time,")"))

gp <- 
  ggplot(datatib1,aes(dates,color = week1 ) ) +
  geom_point() +
  geom_smooth( method = "lm",se = FALSE) +
  scale_x_date() +
  scale_y_continuous(trans="log10") +
  labs(x = "",y = "Number of Cases") +
  ggtitle("Number of Cases with Weekly Doubling Times") +
  theme(plot.title = element_text(hjust = 0.5)) +
  theme(
    legend.position = c(.95,.05),legend.justification = c("right","bottom"),legend.box.just = "right",legend.margin = margin(6,6,6)
  ) +
  labs(color = "Week (Doubling time in days)")

gp

reprex package(v0.3.0)于2020-03-27创建

本文链接:https://www.f2er.com/2570148.html

大家都在问