Значения графика с одной и той же переменной заполнения рядом друг с другом на графике с 2x geom_col - PullRequest
1 голос
/ 29 апреля 2020

У меня есть набор данных, который я хочу построить на гистограмме. Он состоит из переменной x, двух переменных y, показывающих проценты, и переменной, дающей переменным различные свойства (например, A, B и C). Сумма всех y-переменных в одном и том же x равна 100%.

Я построил пример для фрейма данных:

x <- c(0,0,0,50,50,50,100,100,100)
y1 <- c(40,30,5,60,10,5,65,5,5)
y2 <- c(10,10,5,10,10,5,10,10,5)
AB <- c('B','A','C','B','A','C','B','A','C')
test <- data.frame(x,y1,y2,AB)

Я хочу построить график, который показывает проценты при различных значениях x, в отличие от значений в y1 и y2. Я был в состоянии поместить все это в график, показывая y1 в прозрачном виде:

p <- ggplot(test,aes(x=x, group=x)) +
  geom_col(aes(y=y1,fill=AB)) +
  geom_col(aes(y=y2,fill=AB)) +
  scale_fill_manual(values = alpha(c("darkred","darkgreen","blue"),0.6)) +
  coord_flip()
p

You can see the plot here

Теперь я хочу перестроить значения в графике, такие как оба нормальные и прозрачные значения A, B или C находятся рядом друг с другом. Я хочу сравнить пропорции прозрачных и непрозрачных значений (y1 и y2) и различных признаков (A, B, C), что возможно только тогда, когда все значения, например, A, расположены рядом друг с другом.

Можно ли смешивать значения из двух gem_col друг с другом? Я понятия не имею, как это сделать, и пока не могу найти решение.

1 Ответ

0 голосов
/ 29 апреля 2020

Я думаю, это то, что вы ищете. Другой ответ можно найти здесь: Как построить гистограмму с накоплением и группировкой в ​​ggplot?

x <- c(0,0,0,50,50,50,100,100,100)
y1 <- c(40,30,5,60,10,5,65,5,5)
y2 <- c(10,10,5,10,10,5,10,10,5)
AB <- c('B','A','C','B','A','C','B','A','C')
test <- data.frame(x,y1,y2,AB)


barwidth = 20

ggplot(test) +
  geom_bar(mapping =  aes(x = x - barwidth/2, y= y1, fill = AB),
           stat = "identity",
           position = "stack",
           width = barwidth)+
  geom_bar(mapping =  aes(x = x + barwidth/2 + 1, y= y2, fill = AB),
           stat = "identity",
           position = "stack",
           width = barwidth)+
  scale_x_continuous(breaks = c(0,50,100))+
  scale_fill_manual(values = alpha(c("darkred","darkgreen","blue"),0.6)) +
  coord_flip()+
  labs(x = "x")+
  theme_minimal()

enter image description here

...