У меня есть фрейм данных 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')
У меня есть этот график сейчас:
И я хочу что-то вроде этого:
Есть ли способдобавить что-то, чтобы изменить порядок бокса, как описано выше, без изменения кадра данных?Поскольку у меня много разных наборов данных с разными именами кластеров, было бы много работы, чтобы изменить порядок «вручную», просто используя вектор, поэтому я хочу знать, есть ли другое решение.