2 гистограммы с общей осью X

Я хочу построить две сложенные гистограммы, которые имеют общую ось X. Я хочу, чтобы вторая гистограмма была построена как обратная (направленная вниз) первой. Я нашел этот пост, который показывает, как построить гистограммы с накоплением ( Как построить несколько гистограмм с накоплением в R?). Для простоты, скажем, я просто хочу построить ту же самую гистограмму на той же оси X, но обращенной в отрицательном направлении оси Y.

2 ответа

Решение

Вы можете попробовать что-то вроде этого:

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

Визуально, это плохой пример, потому что шкалы переменных все выключены, но это общая идея.

Вы можете подсчитать количество дел, а затем умножить их на -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()

введите описание изображения здесь

Другие вопросы по тегам