我正在尝试使用geom_ribbon进行绘制,其中两个类别的值可能比另一个类别高,并且两个类别可能在该图中多次“切换位置”。
您可以在那里看到功能区完全位于两条线的边界内。但是,当我将填充美学更改为取决于哪个类别具有较高的值时,需要该颜色时,色带在两个点之间“跳转”。
这是我希望两个单独的功能区反应的方式,因为我希望它会填充该功能区具有数据的位置之间的空缺,但是我希望一个带有不同类别填充的功能区能够正确,很好地显示颜色在没有填充美学的功能区中。
我想知道如何正确地分割填充物,而色带的每个部分都不会“跨越”。不一定会有相同数量的更改,并且更改的位置可能是可变的,因此为每个更改编写新的功能区将很痛苦。
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")
答案 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")
请注意,lead(time)
是一个dplyr
动词,采用下一个时间值;与lead_team
无关。另外,我认为您的蓝线和红线已切换。如果我了解您要执行的操作,则领导团队的颜色应该始终排在最前面。