Изменить порядок наложения ggplot - geom_bar - PullRequest
0 голосов
/ 29 октября 2018

У меня возникли проблемы при построении графика с использованием geom_bar. Мне бы хотелось, чтобы график был таким же (см. Ниже), но с перестановкой в ​​обратном порядке (светлый цвет находится сверху жирного цвета). Я хочу, чтобы маленькие бары переместились в верхнюю часть графика

Вот изображение, а ниже график, который я получаю.

enter image description here

А вот мой фрейм данных:

> gluft
      sex mito nac tissue variable       value        se      int
2  female   WT   0 thorax     GSHr  8056.17054 1591.0030  WT.GSHr
4  female   WT   1 thorax     GSHr  7419.13560 1068.4371  WT.GSHr
6  female   WT  10 thorax     GSHr  7719.67792  133.9016  WT.GSHr
8  female  COX   0 thorax     GSHr 17929.34775  790.0533 COX.GSHr
10 female  COX   1 thorax     GSHr 16382.40832  277.0276 COX.GSHr
12 female  COX  10 thorax     GSHr 17087.65114 4735.9644 COX.GSHr
14 female  BAR   0 thorax     GSHr 15354.80693 3350.8182 BAR.GSHr
16 female  BAR   1 thorax     GSHr 16398.20256 2484.8879 BAR.GSHr
18 female  BAR  10 thorax     GSHr 15129.48573  676.4322 BAR.GSHr
20 female   WT   0 thorax     diff    80.56171 1606.9130  WT.diff
22 female   WT   1 thorax     diff    74.19136 1079.1214  WT.diff
24 female   WT  10 thorax     diff    77.19678  135.2406  WT.diff
26 female  COX   0 thorax     diff   179.29348  797.9538 COX.diff
28 female  COX   1 thorax     diff   163.82408  279.7979 COX.diff
30 female  COX  10 thorax     diff   170.87651 4783.3241 COX.diff
32 female  BAR   0 thorax     diff   129.70685 3368.7446 BAR.diff
34 female  BAR   1 thorax     diff   163.98203 2509.7368 BAR.diff
36 female  BAR  10 thorax     diff   983.08450 1173.1470 BAR.diff

Первое, что я делаю, это меняю уровни факторов:

gluft$nac <- factor(gluft$nac)    
gluft$int <- factor(gluft$int, levels = c("WT.GSHr","COX.GSHr","BAR.GSHr", "WT.diff","COX.diff","BAR.diff"))

Затем я строю данные:

ggplot(data=gluft, aes(x=nac, y=value, group=mito))+
  geom_bar(aes(fill=int),
           stat = "identity",
           position=position_dodge())+
  scale_fill_manual(
       breaks=c("WT.GSHr","COX.GSHr","BAR.GSHr","WT.diff","COX.diff","BAR.diff"),
        values=c("blue4", "green4","red2","lightblue","lightgreen","pink"))

Теперь я попытался изменить уровни факторов вперед и назад, и это ничего не делает.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Я думаю, что это может сделать то, что вам нужно. Я просто изменил порядок цветов в

values(...) 

Теперь ваше изображение должно иметь светлые цвета вверху и жирные цвета внизу. Вот полный код.

ggplot(data=gluft, aes(x=nac, y=value, group=mito))+
geom_bar(aes(fill=int),
       stat = "identity",
       position=position_dodge())+
scale_fill_manual(
   breaks=c("WT.GSHr","COX.GSHr","BAR.GSHr","WT.diff","COX.diff","BAR.diff"),
    values=c("lightblue","lightgreen","pink","blue4", "green4","red2"))

Ура; -)

Хорошо, теперь я понимаю, что вы просили. Я нашел решение без использования ggplot2, и это, вероятно, не самое элегантное, но оно делает свое дело. Сначала я уменьшил набор данных, включив в него только необходимые столбцы. Затем использовал функцию spread () из пакета tidyr, чтобы перевести df из длинного формата в широкий. Затем я построил составной барплот, используя простые команды построения графиков.

library(tidyr)

gluft1 <- gluft[,c("int", "value", "nac")]
data_wide <- spread(gluft1, nac, value)

barplot(as.matrix(data_wide[1:3,2:4]) + as.matrix(data_wide[4:6,2:4]), beside = T, col = c("yellow","lightgreen","pink"))
barplot(as.matrix(data_wide[1:3,2:4]), beside = T, col = c("blue4", "green4","red2"), add = T)

Результатом должен быть следующий график:

enter image description here

Затем вы можете добавить свою легенду. Надеюсь, это поможет.

Приветствие.

...