Как я могу заполнить точки разными цветами, располагая их в соответствии с другой группой в R? - PullRequest
2 голосов
/ 22 апреля 2020

У меня есть набор данных, в котором разные генотипы проходили разные условия тестирования. Это было сделано в нескольких разных когортах. Поэтому я хочу создать точечный график, который различает разные генотипы. Я также хочу, чтобы у каждой точки в каждой группе генотипов был цвет, представляющий, из какой они группы.

Я создал набор данных в качестве примера:

Y<-c(2,3,1,6,4,5,3,3,4)
X<-c('test','test','test','test','control','control','control','test','control')
Cohort <- c("first", "Second", "Second", "Second", "Second", "first", "Second","Second", "first")
Genotype<-c("WT","WT","WT","Mutant","Mutant","Mutant","Mutant","WT","WT")

DF<-data.frame(X,Y,Cohort,Genotype)
DF

ggplot(DF, aes(x=X, y=Y, group= X:Genotype)) +
  geom_dotplot(binaxis = "y", stackdir = "center", binwidth = 0.5, stroke= 3, aes(colour= Genotype, fill = Cohort), position = position_dodge(1)) +
  scale_fill_manual(values = c("light blue", "blue"))+
  scale_color_manual(values = c("orange",  "purple"))

Когда я выполняю этот код, я получаю график, аналогичный желаемому. Тем не менее, некоторые точки оставляются пустыми, а не окрашиваются в соответствии с группой.

Вот график с незаполненными точками.

Спасибо за помощь!

1 Ответ

0 голосов
/ 22 апреля 2020

возможно, вам следует удалить group в вашем aes. Вот пример:

ggplot(DF, aes(x = X, y = Y, fill = Cohort, color = Genotype))+
  geom_point(shape = 21, size = 10, position = position_jitter(0.2), stroke = 2)+
  scale_fill_manual(values = c("light blue", "blue"))+
  scale_color_manual(values = c("orange",  "purple"))+
  guides(fill = guide_legend(override.aes = list(fill = c("light blue", "blue"), color = c(NA,NA))))

enter image description here

Отвечает ли он на ваш вопрос?


РЕДАКТИРОВАТЬ: Разделение WT / Mutant Control / Test

Если вы хотите разделить значения x на основе обработки и генотипа, вы можете использовать interaction, чтобы создать 4 значения x на основе обработки и генотипа:

ggplot(DF, aes(x = interaction(X,Genotype), y = Y, fill = Cohort, color = Genotype))+
  geom_point(shape = 21, size = 10, stroke = 2, position = position_dodge2(0.5))+
  scale_fill_manual(values = c("light blue", "blue"))+
  scale_color_manual(values = c("orange",  "purple"))+
  guides(fill = guide_legend(override.aes = list(fill = c("light blue", "blue"), color = c(NA,NA))))

enter image description here

Другая возможность состоит в том, чтобы нанести грань на график, используя facet_wrap:

ggplot(DF, aes(x = Genotype, y = Y, fill = Cohort, color = Genotype))+
  geom_point(shape = 21, size = 10, stroke = 2, position = position_dodge2(0.5))+
  scale_fill_manual(values = c("light blue", "blue"))+
  scale_color_manual(values = c("orange",  "purple"))+
  guides(fill = guide_legend(override.aes = list(fill = c("light blue", "blue"), color = c(NA,NA))))+
  facet_wrap(~X, strip.position = "bottom")+
  theme(strip.placement = "outside",
        strip.background = element_blank(),
        panel.spacing = unit(-1,"lines"),
        axis.title.x = element_blank())

enter image description here

...