ggplot2 连续直方图

2024-02-22

我有一些数据,如下所示:

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

... etc.

我正在 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)
  )

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()

显然,根据您的兴趣清理标签和颜色。

最后一点,根据您的用例,您可能需要考虑这种“背靠背”方法是否真的是您想要的。这使得比较条形的高度变得非常困难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2 连续直方图 的相关文章

随机推荐