2016-04-11 4 views
1

У меня есть данные, состоящие из нескольких классов (в этом примере три класса) испытуемых, но классы варьируются в зависимости от трех временных моментов: генотип, ранний фенотип и поздние стадии фенотипа.Создание графика перехода с тремя столбцами

Вот образец данных:

genotype<-cbind(c(rep("A",100),rep("B",100),rep("C",100))) 
early_phenotype<-cbind(c(rep("A",75),rep("B",75),rep("C",75),rep("A",75))) 
late_phenotype<-cbind(c(rep("A",50),rep("B",100),rep("C",100),rep("A",50))) 
df<-cbind(genotype,early_phenotype,late_phenotype) 
df<-as.data.frame(df) 
colnames(df)<-c("genotype","early_phenotype","late_phenotype") 

Я хотел бы, чтобы производить то, что обычно называют «переходный участок». Ближайший я получил это:

library(Gmisc) 
transitionPlot(table(df[,1:2]), txt_start_clr = "black", txt_end_clr = "black", fill_start_box = "white", fill_end_box = "white") 

... который производит этот сюжет: enter image description here

Но я пытаюсь добиться двух вещей, что этот участок не имеют:

  1. Я хочу больше двух столбцов, в этом примере три столбца: генотип, ранний фенотип и поздний фенотип. В данном примере это будет выглядеть следующим образом (я этого достиг в Photoshop, а не в R) enter image description here

  2. Вместо одиночных стрелок с различными весами, которые соединяют две коробки, я предпочел бы иметь несколько стрелок с джиттера/прозрачность где каждая стрелка будет представлять собой отдельные наблюдения, и появится что-то вроде этого: enter image description here

Есть предложения?

P.S. Меня не волнуют изогнутые края ящиков или причудливые тени.

+0

Более 2 колонки возможно при использовании [Gmisc :: Transition-класс] (https://cran.r-project.org/web/packages/Gmisc/vignettes/Transition-class.html) –

ответ

3
  1. Я хочу больше, чем две колонки, в этом примере три колонки
  2. Вместо одиночных стрелок с различными весами, которые соединяют две коробки, я предпочел бы иметь несколько стрел

Возможно, попробуйте что-то, используя igraph:

m <- sapply(1:3, function(x) paste0(df[, x], x)) 
el <- rbind(m[, 1:2], m[, 2:3]) 
library(igraph) 
g <- graph_from_edgelist(el) 
coords <- layout.norm(t(sapply(strsplit(V(g)$name, ""), function(x) as.numeric(c(-match(x[1], LETTERS), x[2]))))) 
plot(g, layout=coords[, 2:1]) 

enter image description here

+0

выглядит многообещающим, никогда не слышавшим о «играфе» раньше. Есть ли способ изменить стрелки в форме шпинделя, чтобы быть менее ошеломляющими? Реальные данные имеют 1000 наблюдений, поэтому я предпочел бы использовать альфа/прозрачность (я добавил образец изображения в мой пост выше) – Oposum

+0

Посмотрите на '? Igraph.plotting' - вы можете, например, добавить' edge.arrow.size = 0.5', чтобы уменьшить размер стрелки. Кажется, что «edge.color» с альфой (например, «# 99999966') не работает. – lukeA

+0

Я вижу, без альфы, хотя это будет выглядеть как сплошной шпиндель – Oposum

Смежные вопросы