我认为最直接的方法是自己计算垃圾箱,然后反转这些垃圾箱的符号。
首先,一些足够大的样本数据来演示效果:
testData <-
data.frame(
value = rnorm(1000, 10, 2)
, direction = sample(c("UP","DOWN")
, 1000
, TRUE)
)
Then, cut
将数据放入您选择的容器中,并将其中一组的值修改为负数。 (使用dplyr
and magrittr
)
toPlot <-
testData %>%
mutate(bin = cut(value, pretty(value, 20))) %$%
table(bin, direction) %>%
as.data.frame() %>%
mutate(plotVal = ifelse(direction == "DOWN"
, -1*Freq
, Freq))
然后,将该 data.frame 传递给ggplot
你应该得到你想要的。 (注意,这是使用开发版本ggplot2
,你可能需要使用geom_bar(stat = "identity")
代替geom_col
如果您使用的是稳定版本)。
toPlot %>%
ggplot(aes(x = bin
, y = plotVal
, fill = direction)) +
geom_col()
显然,根据您的兴趣清理标签和颜色。
最后一点,根据您的用例,您可能需要考虑这种“背靠背”方法是否真的是您想要的。这使得比较条形的高度变得非常困难。