Создайте сгруппированную столбчатую диаграмму этих данных

#r #plot #graph

#r #постройте #График

Вопрос:

Я искал на этом форуме, но каждая сгруппированная столбчатая диаграмма, которую я нашел, была основана на группировке по столбцу. Однако я уже использовал Java для объединения своих данных, но я не знаю, как отобразить эти данные в сгруппированной столбчатой диаграмме: Как я создаю матрицу (я опущу весь код, чтобы упростить его):

 MAT2 = matrix(data, ncol=2)
MAT2 = cbind(MAT2,kolommen)
colnames(MAT2) <- c("mpk6","mpk3","group")  
  

что дает мне:

        mpk6 mpk3 group                 
     [1,] "9"  "0"  "membrane"            
     [2,] "91" "64" "plastid"             
     [3,] "12" "0"  "extracellular region"
     [4,] "74" "21" "thylakoid"           
     [5,] "6"  "0"  "vacuole"             
     [6,] "21" "33" "cytosol"             
     [7,] "4"  "0"  "plasma membrane"     
     [8,] "9"  "12" "peroxisome"          
     [9,] "0"  "0"  "mitochondrion"       
    [10,] "22" "13" "nucleolus"           
    [11,] "0"  "0"  "ribosome"            
    [12,] "27" "31" "cell wall"  
  

Но когда я строю это с помощью barplot, я получаю следующий результат:
введите описание изображения здесь

Столбики сгруппированы на основе mpk6 и mpk3, но я хочу сгруппировать для «мембраны», «пластиды», «внеклеточной области» и т.д..:
введите описание изображения здесь
Я не знаю, возможно ли это, но если это возможно, было бы неплохо просто удалить столбики высотой 0, чтобы на графике было не так много пробелов (но, возможно, это разрушит всю идею сгруппированной столбчатой диаграммы, поэтому, если есть предложения о лучшем варианте, они приветствуются!)

Комментарии:

1. довольно интересно удалить столбики высотой 0

Ответ №1:

Предполагая, что ваши данные находятся в вызываемом data.frame A или их можно принудительно преобразовать в data.frame, вот мое первое предположение с использованием tidyr , dplyr и ggplot2 библиотек :

 A <- gather(A, mpk, n, mpk6:mpk3)

ggplot(A %>% filter(n > 0) %>% mutate(group=droplevels(group)),
       aes(x=group, y=n, group=mpk, fill=mpk))   
geom_bar(position='dode', stat='identity')  
coord_flip()
  

Пробел больше не виден, но ширина каждой строки фиксирована, независимо от того, сколько разных измерений mpk-n с ней связано

столбчатый график данных, снабженных полосами переменной ширины

Другой вариант, если вы хотите, чтобы ширина столбцов была одинаковой (но на графике больше пробелов)

 ggplot(A %>% filter(n > 0) %>% mutate(group=droplevels(group)) %>%
       group_by(group) %>% mutate(m=n()),
       aes(x=group, y=n, group=mpk, fill=mpk, width=0.9*m/max(m)))   
geom_bar(position=position_dodge(width=0.9), stat='identity')  
coord_flip()
  

альтернативный столбчатый график данных с постоянной шириной полосы, но пробел появляется, когда в группах разное количество членов, поскольку расстояние между группами постоянно

Комментарии:

1. Неясно, как вы хотите, чтобы группировка работала, я интерпретировал ее как facet grid, но вы могли бы легко создать объединенную диаграмму, используя position='dodge' в geom_bar()

2. Спасибо, но я хочу, чтобы они были сгруппированы как мой второй рисунок, показанный в вопросе, поэтому синий для MPK6 и красный для MPK3, например

3. Таким образом, не два отдельных графика, а фактически два графика, которые вы создали, объединены в один

4. Просто удалите команду facet grid и затем добавьте в position=dodge. установите fill=mpk, чтобы цвета в mpk различались. Обновленный ответ с этими изменениями.

5. У меня уже есть матрица, должен ли я выполнить этот шаг: «A <- gather(A, mpk, n, mpk3: mpk6)»? также вы ввели mpk в этом, но что из этих двух вы имели в виду: mpk3 или mpk6? Спасибо, что помогли по-настоящему оценить ti!