Переупорядочить блочный график на основе нескольких переменных без изменения кадра данных - PullRequest
0 голосов
/ 24 января 2019

У меня есть фрейм данных data, с несколькими столбцами.

dput(head(data,15))

Counts samples.sample_name  samples.class samples.cluster
0      F1S4_161018_001_A01  Glutamatergic   LGN Exc BTNL9
2      F1S4_161018_001_B01  Glutamatergic   LGN Exc BTNL9
41     F1S4_161018_001_C01  GABAergic       LGN Inh NTRK1
0      F1S4_161018_001_E01  Glutamatergic   LGN Exc PAX3
1      F1S4_161018_001_F01  Glutamatergic   LGN Exc BTNL9
0      F1S4_161018_001_G01  Glutamatergic   LGN Exc PAX3
10     F1S4_161018_001_H01  GABAergic       LGN Inh LAMP1
25     F1S4_161018_001_F01  GABAergic       LGN Inh PAX3

Всего 15000 строк, и каждая строка - одна ячейка.

Я хочу создать блокпостотсчетов в каждом кластере, где ось X упорядочена по отсчетам (от низкого до высокого), но также упорядочена по классу.Итак, сначала все кластеры, упорядоченные по количеству GABAergic, затем Glutamatergic и т. Д.

У меня есть эта строка кода:

library(ggplot2)

ggplot(data[which(data$Counts > 0), ], 
       aes(x = reorder(samples. cluster, Counts), y = Counts)) + 
  geom_boxplot(aes(color = samples.class)) + 
  labs(title = paste('Expression of DMD in the human cortex', brain_area), 
       x = 'Cluster', y = 'Log2(Counts)') + 
  geom_text(aes(label = ..count..), y = -1, stat = 'count', colour = 'blue', size = 5) +
  coord_cartesian(ylim = c(-1, max(data$Counts))) + 
  theme(axis.text.x = element_text(angle = 60, hjust = 1), 
        legend.position = 'none')

У меня есть этот график сейчас:

enter image description here

И я хочу что-то вроде этого:

enter image description here

Есть ли способдобавить что-то, чтобы изменить порядок бокса, как описано выше, без изменения кадра данных?Поскольку у меня много разных наборов данных с разными именами кластеров, было бы много работы, чтобы изменить порядок «вручную», просто используя вектор, поэтому я хочу знать, есть ли другое решение.

...