r - ggplot2 连续直方图

标签 r ggplot2

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

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将数据放入您选择的容器中,并将其中一组的值修改为负数。 (使用 dplyrmagrittr )

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

enter image description here

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

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

关于r - ggplot2 连续直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40047603/

相关文章:

r - data.frame(..., check.names = FALSE) 错误 : invalid multibyte string, 元素 4693

r - 在R中绘制巨大的数据文件?

r - 根据一列中的最小值聚合以删除数据表中的重复项

r - 在格子中绘制选定的随机效应观测值

r - 在ggplot中绘制两个图表

r - 以美国的形状排列 ggplot 刻面

r - 如何在ggplot中的标签内对主Y轴进行排序

r - ggplot2 中的 annotation_logticks 和 facet 图

r - dplyr 按第一列过滤

python - 如何获得与python pandas模块中的Data.Frame相同的data.frame?