2017-02-07 8 views
2

Я пытаюсь отображать боковую диаграмму, которая сравнивает количество каждого графа букв между двумя столбцами. (А-х рядом друг с другом, Б рядом друг с другом и т.д.)бок о бок barplot с ggplot

> dat = data.frame(grade1 = c('A','A','A','B','B','C'), grade2 = c('A','B','C','C','D','D')) 
> dat 
    grade1 grade2 
1  A  A 
2  A  B 
3  A  C 
4  B  C 
5  B  D 
6  C  D 
> ggplot(dat, aes(x=grade1, fill=grade2)) + 
    geom_bar(position=position_dodge()) 

Я пытаюсь получить результат, который выглядит примерно так с 4-мя метками на оси х (А, В, С, D). Есть ли определенная функция dplyr, которую я должен использовать?

https://i0.wp.com/martinsbioblogg.files.wordpress.com/2014/03/means-barplot.png

+0

ваш вопрос не ясен. Пожалуйста, объясните – Koundy

+0

@koundy https://i0.wp.com/martinsbioblogg.files.wordpress.com/2014/03/means-barplot.png –

ответ

4

Вы должны преобразовать фрейм данных в опрятном виде. Для этого вы можете использовать функцию пакета tidyrgather. Для того, чтобы обеспечить правильную сортировку для класса буквы, используя упорядоченный фактор целесообразно:

library(tidyr) 
library(ggplot2) 

dat <- data.frame(grade1 = c('A','A','A','B','B','C'), grade2 = c('A','B','C','C','D','D')) 

tidy_dat <- gather(dat) 
tidy_dat[,2] <- ordered(tidy_dat[,2], levels = c('A','B','C','D')) 

ggplot(tidy_dat, aes(x= value, fill = key))+ 
    geom_bar(position = 'dodge') 

enter image description here

+0

Просто подумал, но это еще лучше. Спасибо, добрый сэр! –