geom_ribbon分类填充就像两个单独的功能区一样工作

时间:2019-05-14 14:29:13

标签: r ggplot2

我正在尝试使用geom_ribbon进行绘制,其中两个类别的值可能比另一个类别高,并且两个类别可能在该图中多次“切换位置”。

请参阅示例1: enter image description here

您可以在那里看到功能区完全位于两条线的边界内。但是,当我将填充美学更改为取决于哪个类别具有较高的值时,需要该颜色时,色带在两个点之间“跳转”。

请参阅示例2: enter image description here

这是我希望两个单独的功能区反应的方式,因为我希望它会填充该功能区具有数据的位置之间的空缺,但是我希望一个带有不同类别填充的功能区能够正确,很好地显示颜色在没有填充美学的功能区中。

我想知道如何正确地分割填充物,而色带的每个部分都不会“跨越”。不一定会有相同数量的更改,并且更改的位置可能是可变的,因此为每个更改编写新的功能区将很痛苦。

this之类的示例仅处理一次填充。

min <- c(10,10,20,20,30,30,40,40,50,50,60,60)
t1cumi <- c(3,3,3,4,4,4,4,8,8,9,9,9)
t2cumi <- c(1,1,1,5,5,5,5,5,5,5,5,10)
lead_team <- c("Team1","Team1","Team1","Team2","Team2","Team2","Team2","Team1","Team1","Team1","Team1","Team1")
minimum <- c(1,1,1,4,4,4,4,5,5,5,5,9)
maximum <- c(3,3,3,5,5,5,5,8,8,9,9,10)

newtab3 <- data.frame(min,t1cumi,t2cumi,lead_team,minimum,maximum)
ggplot(newtab3)+
  geom_ribbon(aes(x=min,ymin=minimum,ymax=maximum,fill=lead_team))+
  geom_step(aes(x=min,y=t1cumi),colour="blue")+
  geom_step(aes(x=min,y=t2cumi),colour="red")

1 个答案:

答案 0 :(得分:1)

我认为geom_rect()是更好的搭配。像这样:

time <- c(10, 20, 30, 40, 50, 60)
team1 <- c(3, 4, 4, 8, 9, 9)
team2 <- c(1, 5, 5, 5, 5, 10)

df <- data.frame(time, team1, team2) %>% 
  mutate(lead_team = ifelse(team1 > team2, "Team1", "Team2"))


ggplot(df) + 
  geom_rect(aes(xmin = time, xmax = lead(time), ymin = team1, ymax = team2, 
    fill = lead_team), alpha = .6) + 
  geom_step(aes(x = time, y = team1), color = "red", lwd = 1.5) + 
  geom_step(aes(x = time, y = team2), color = "blue", lwd = 1.5) + 
  scale_fill_manual(values = c("red", "blue")) + ylab("Score")

enter image description here

请注意,lead(time)是一个dplyr动词,采用下一个时间值;与lead_team无关。另外,我认为您的蓝线和红线已切换。如果我了解您要执行的操作,则领导团队的颜色应该始终排在最前面。