2016-12-08 2 views
0

мне было интересно, если можно создать диаграмму из подобного набора данных, как таблицы данных ниже:Создать диаграмму в R

col0      col1      col2   col3 
name      <NA>      <NA>   <NA>  
name cat, centipede, milipede, snail, flay, worm cat   vertebrates  
name cat, centipede, milipede, snail, flay, worm centipede arthropods  
name cat, centipede, milipede, snail, flay, worm milipede  arthropods  
name cat, centipede, milipede, snail, flay, worm snail  mollusc  
name cat, centipede, milipede, snail, flay, worm fly   insect  
name cat, centipede, milipede, snail, flay, worm worm   invertebrates 

и создать диаграмму с R, который будет более или менее похож на картинку ниже:

enter image description here

+1

Попробуйте что-нибудь вроде пакета foodweb. –

+1

'DiagrammeR',' networkD3' и некоторые другие такого рода могут создавать такие диаграммы, но где эта иерархия представлена ​​в этом фрагменте данных? – hrbrmstr

+0

данные, с которыми я работаю, не имеют иерархии, поэтому диаграмма R должна сама по себе воспринимать значение, как «позвоночные» и «беспозвоночные», как показано ниже –

ответ

1

Try igraph начиная со следующего ДФ:

library(igraph) 
df 
    col0         col1   col2   col3 
1 name         <NA>   <NA>   <NA> 
2 name cat,centipede,milipede,snail,flay,worm vertebrates  animal 
3 name cat,centipede,milipede,snail,flay,worm invertebrates  animal 
4 name cat,centipede,milipede,snail,flay,worm   cat vertebrates 
5 name cat,centipede,milipede,snail,flay,worm  centipede arthropods 
6 name cat,centipede,milipede,snail,flay,worm  milipede arthropods 
7 name cat,centipede,milipede,snail,flay,worm arthropods invertebrates 
8 name cat,centipede,milipede,snail,flay,worm  mollusc invertebrates 
9 name cat,centipede,milipede,snail,flay,worm   snail  mollusc 
10 name cat,centipede,milipede,snail,flay,worm  insect invertebrates 
11 name cat,centipede,milipede,snail,flay,worm   fly  insect 
12 name cat,centipede,milipede,snail,flay,worm   worm invertebrates 

df <- df[df$col1 != '<NA>',] 
species <- union(df$col3, df$col2) 
df <- df[c('col3', 'col2')] 
names(df) <- c('from', 'to') 
g <- graph.data.frame(df, directed = TRUE, vertices = species) 
plot(g,vertex.size=2, vertex.label.dist=0.5, vertex.color="cyan", 
    edge.arrow.size=0.5, layout=layout.reingold.tilford(g, root='animal')) 

enter image description here

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