R ggplot2背对背直方图

R ggplot2背对背直方图,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\u y\u reverse()分别制作这两个。。。。但这不是我需要的 我需要做一个背对背的图表,这样所有的“向下”值都在负y轴上,而向上的值在正y轴上。x轴是“值”列,y轴是该范围内向上或向下的计数 有

我有一些数据如下所示:

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\u y\u reverse()
分别制作这两个。。。。但这不是我需要的

我需要做一个背对背的图表,这样所有的“向下”值都在负y轴上,而向上的值在正y轴上。x轴是“值”列,y轴是该范围内向上或向下的计数

有人能帮忙吗?这样向下的值将按负方向计数

感谢您的帮助。
谢谢。

我认为最简单的方法是自己计算垃圾箱,然后将这些垃圾箱的符号颠倒过来

首先,一些样本数据足够大,足以证明其效果:

testData <-
  data.frame(
    value = rnorm(1000, 10, 2)
    , direction = sample(c("UP","DOWN")
                         , 1000
                         , TRUE)
  )
然后,将data.frame传递给
ggplot
,您应该会得到您想要的。(注意,这是使用开发版本的
ggplot2
,如果您使用的是稳定版本,则可能需要使用
geom\u bar(stat=“identity”)
而不是
geom\u col

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


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

是否将所有向下的值转换为负值
data$value此问题有任何更新,或者下面的答案中缺少一个部分?很抱歉,回复太晚。我能够在创建我想要复制的示例图的分析师的帮助下创建一个代码。基本上,我在excel中创建了3列—一列包含所有值,一列包含向上值,另一列包含向下值。在此基础上,我创建了包含所有值的列、向上直方图和向下直方图,向下计数为(-DOWN.hist$counts),向上计数为(UP.hist$counts)。然后使用plot函数非常有效地组合两个图形。如果有人感兴趣并想查看代码,请告诉我。这是一个长期的反复试验过程。谢谢大家的帮助-克莱尔G.很抱歉,回复晚了。我能够在创建我想要复制的示例图的分析师的帮助下创建一个代码。基本上,我在excel中创建了3列—一列包含所有值,一列包含向上值,另一列包含向下值。在此基础上,我创建了包含所有值的列、向上直方图和向下直方图,向下计数为(-DOWN.hist$counts),向上计数为(UP.hist$counts)。然后使用plot函数非常有效地组合两个图形。如果有人感兴趣并想查看代码,请告诉我。这是一个长期的反复试验过程。谢谢大家的帮助-克莱尔G.我发布的答案有什么不适合你的地方吗?我只是想知道这是怎么回事。不,你的答案没有问题。这是彻底的,理解起来很有帮助。我确实试过使用ggplot,并记住了您的答案,但发现hist和plot更简单。如果我在不久的将来有更多的时间,我计划再次尝试ggplot。谢谢你的回答!您是否可以垂直移动两个图(即,如何在两个图之间添加垂直空间),以生成本文()中的图1?
toPlot <-
  testData %>%
  mutate(bin = cut(value, pretty(value, 20))) %$%
  table(bin, direction) %>%
  as.data.frame() %>%
  mutate(plotVal = ifelse(direction == "DOWN"
                          , -1*Freq
                          , Freq))
toPlot %>%
  ggplot(aes(x = bin
             , y = plotVal
             , fill = direction)) +
  geom_col()