我有一些数据,如下所示:
value direction
2.2 UP
2.3 DOWN
2.4 UP
2.4 DOWN
2.5 DOWN
2.5 UP
2.5 DOWN
2.5 UP
2.6 DOWN
...等等
我正在 R 中使用 ggplot2 并希望制作一个背靠背直方图。我可以使用 +scale_y_reverse()
分别制作两者......但这不是我需要的。
我需要制作一个背靠背图表,以便所有“DOWN”值都位于负 y 轴上,而 UP 值位于正 y 轴上。 x 轴是“值”列,y 轴是该范围内 UP 或 DOWN 的数量。
谁能帮忙解决这个问题吗?这样 DOWN 值就按负方向计数..
感谢任何帮助。 谢谢。
最佳答案
我认为最直接的方法是自己计算垃圾箱,然后反转这些垃圾箱的符号。
首先,一些足够大的示例数据来演示效果:
testData <-
data.frame(
value = rnorm(1000, 10, 2)
, direction = sample(c("UP","DOWN")
, 1000
, TRUE)
)
然后,cut
将数据放入您选择的容器中,并将其中一组的值修改为负数。 (使用 dplyr
和 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()
显然,根据您的兴趣清理标签和颜色。
最后一点,根据您的用例,您可能需要考虑这种“背对背”方法是否真的是您想要的。这使得比较条形的高度变得非常困难。
关于r - ggplot2 连续直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047603/