你可以试试:
d$xmin <- rep(c(0.55, 1.55),each=2)
d$xmax <- rep(c(1.45, 2.45),each=2)
d$ymin <- c(100, 0, 200, 0)
d$ymax <- c(150, 10, 350, 10)
ggplot(d) +
geom_col(aes(x=Sp, y=Val1, fill=Type)) +
geom_rect(aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), alpha=0.5)
的想法是在酒吧手动添加矩形(我在这里使用geom_col因为此功能默认使用stat_identity
)。因此,您可以自己计算分钟数和最大值,并添加一些阿尔法来重新绘制条形图。
或者你可以尝试更自动化的解决方案dplyr
:
library(tidyverse)
d %>%
arrange(Sp, -as.numeric(Type)) %>%
mutate(ymin=ifelse(Type=="One",lag(Val1),0),
ymax=ifelse(Type=="Two",Val2, lag(Val1)+Val2)) %>%
mutate(Sp_n=as.numeric(Sp)) %>%
ggplot() +
geom_col(aes(x=Sp_n, y=Val1, fill=Type))+
geom_rect(aes(xmin=Sp_n-0.45, xmax=Sp_n+0.45, ymin=ymin, ymax=ymax),
fill="white", alpha= 0.7) +
scale_x_continuous(breaks = 1:2, labels = unique(d$Sp))
请更精确。你想在Val1上面叠加Val2吗?或者你想要一个包含两个值的堆叠barplot? – Jimbou
它是Val2阴影的堆叠式barplot。我的意思是我想在Val1酒吧里添加Val2。即A将会有2个堆栈,1个有200个,2个有100个。在200个堆栈中,我想用50个和100个区域来遮蔽10个区域。如果我们有50和10个相同的颜色,它看起来就像两个堆栈中标记的比例! – Arun
好的,然后看看我的答案!其他人只是总结Val1和Val2。 – Jimbou