R 使用计数和累积计数在ggplot中创建2个y轴

R 使用计数和累积计数在ggplot中创建2个y轴,r,ggplot2,histogram,R,Ggplot2,Histogram,这里有一些虚拟数据 dummy <- data.frame(numbers = 1:5, symptomdate = as.Date(c("2012-08-30", "2012-08-30", "2012-08-31", "2012-09-01", "2012-09-01")), reporteddate = as.Date(c("2012-09-02", "

这里有一些虚拟数据

dummy <- data.frame(numbers = 1:5,
symptomdate  = as.Date(c("2012-08-30", "2012-08-30", "2012-08-31", "2012-09-01", "2012-09-01")),
reporteddate = as.Date(c("2012-09-02", "2012-09-03", "2012-09-05", "2012-09-07", "2012-09-08")),
dateofdeath   = as.Date(c("2012-09-10", NA, NA, NA, "2012-09-31")),
gender = c("Female", "Male", "Male","Female", "Male"),
position = c("Resident", "Staff", "Resident", "Staff", "Staff"), 
outbreakdate = as.Date(c("2012-08-31","2012-08-31","2012-08-31","2012-08-31","2012-08-31")))

我知道这一定很简单,但我看了无数的帖子,都想不出来。提前谢谢你

试试这个。使用虚拟数据,您可以为案例和累积计数创建变量。计算比例因子后,可以将形状重塑为“长”,并使用所需结构绘制绘图。这里是代码,其中
tidyverse
函数已在
dummy
dataframe上使用:

library(tidyverse)
#Code
newdf <- dummy %>% group_by(symptomdate) %>%
  summarise(Count=n()) %>% ungroup() %>%
  mutate(Cum=cumsum(Count))
#Scaling factor
sf <- max(newdf$Count)
newdf$Cum <- newdf$Cum/sf
#plot
newdf %>%
  pivot_longer(-symptomdate) %>%
  ggplot(aes(x=symptomdate)) +
  geom_bar( aes(y = value, fill = name, group = name),
            stat="identity", position=position_dodge(),
            color="black", alpha=.6)  +
  scale_fill_manual(values = c("blue", "red")) +
  scale_y_continuous(name = "Cases",sec.axis = sec_axis(~.*sf, name="Cum Cases"))+
  labs(fill='Variable')+
  theme_bw()
库(tidyverse)
#代码
新DF%分组依据(症状日期)%>%
汇总(计数=n())%%>%ungroup()%%>%
突变(Cum=cumsum(计数))
#比例因子
sf%
ggplot(aes(x=症状日期))+
几何图形条(aes(y=值,填充=名称,组=名称),
stat=“identity”,position=position\u dodge(),
color=“黑色”,alpha=.6)+
刻度填充手动(数值=c(“蓝色”、“红色”))+
连续缩放(name=“Cases”,sec.axis=sec\u轴(~.*sf,name=“Cum Cases”))+
实验室(fill='Variable')+
主题_bw()
输出:


非常感谢您!在创建新数据集时,如何保留一些其他变量(性别、年龄等)?@mobo1在这种情况下,您应该使用
mutate()
或使用smt,如
dummy%>%left\u join(newdf)
小心,在绘图中可以放置所有这些变量。处理好这件事。我希望这个答案对你有用!成功了!这非常有用,谢谢@太棒了!如果你发现这个答案,请考虑接受它。
library(tidyverse)
#Code
newdf <- dummy %>% group_by(symptomdate) %>%
  summarise(Count=n()) %>% ungroup() %>%
  mutate(Cum=cumsum(Count))
#Scaling factor
sf <- max(newdf$Count)
newdf$Cum <- newdf$Cum/sf
#plot
newdf %>%
  pivot_longer(-symptomdate) %>%
  ggplot(aes(x=symptomdate)) +
  geom_bar( aes(y = value, fill = name, group = name),
            stat="identity", position=position_dodge(),
            color="black", alpha=.6)  +
  scale_fill_manual(values = c("blue", "red")) +
  scale_y_continuous(name = "Cases",sec.axis = sec_axis(~.*sf, name="Cum Cases"))+
  labs(fill='Variable')+
  theme_bw()