2个堆叠的直方图,共同的x轴

时间:2015-10-12 14:48:24

标签: r plot histogram stacked

我想绘制两个共享共同x轴的叠加直方图。我希望将第二个直方图绘制为第一个直方图的倒数(指向下方)。我发现这篇文章展示了如何绘制堆积直方图(How to plot multiple stacked histograms together in R?)。为了简单起见,我想说我只想绘制相同的直方图,在相同的x轴上但面向负的y轴方向。

2 个答案:

答案 0 :(得分:3)

您可以对案例进行计数,然后将一个类别的计数乘以-1。 data.table / ggplot

的示例
library(data.table)
library(ggplot2)

# fake data
set.seed(123)
dat <- data.table(value = factor(sample(1:5, 200, replace=T)),
                  category = sample(c('a', 'b'), 200, replace=T))

# count by val/category; cat b as negative
plot_dat <-
   dat[, .(N = .N * ifelse(category=='a', 1, -1)), 
       by=.(value, category)]

# plot
ggplot(plot_dat, aes(x=value, y=N, fill=category)) +
  geom_bar(stat='identity', position='identity') +
  theme_classic()

enter image description here

答案 1 :(得分:1)

您可以尝试这样的事情:

ggplot() + 
    stat_bin(data = diamonds,aes(x = depth)) + 
    stat_bin(data = diamonds,aes(x = depth,y = -..count..))

回应其他评论:

library(dplyr)
library(tidyr)
d1 <- diamonds %>% 
        select(depth,table) %>% 
        gather(key = grp,value = val,depth,table)

ggplot() + 
   stat_bin(data = d1,aes(x = val,fill = grp)) + 
   stat_bin(data = diamonds,aes(x = price,y = -..count..))

从视觉上看,这是一个不好的例子,因为变量的比例都是关闭的,但这是一般的想法。