你可以試試:
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