Diagrama de interacciones

2020-10-07 R Bipartite circlize Network3D

1. Cargar los paquetes y la tabla de datos.

Primero cargamos el paquete “bipartite”, si aun no esta instalado debemos instalarlo primero con la funcion install.packages(“bipartite”)

library(bipartite)
data("bezerra2009")

En este ejemplo usaremos la tabla 1 de datos de bezerra2009 la cual consta de observaciones de 38 individuos pertenecientes a 13 especies de plantas oleaginosas de la familia Malphighiaceae. Se colectaron los visitantes florales y solo se consideraron los visitantes legítimos. Los números en la tabla se refieren a la cantidad de visitantes de cada especie de abeja recolectada en cada especie de planta. El número de abeja que visitaron las flores se registraron durante cuatro días consecutivos, de 5.00 a 17.00 con un total de 1392h de observaciones.

Ubicación: Parque Nacional do Catimbau, Brasil (8°24’00" -37°36’35“S y 3°09’30” -37°14’40"W)

Para mas información puede visitar http://www.nceas.ucsb.edu/interactionweb

Table 1: Tabla de datos
Centris.aenea Centris.fuscata Centris.caxiensis Centris.tarsata Centris.flavifrons Centris.trigonoides Centris.obsoleta Epicharis.sp2 Apis.mellifera Centris.sp3 Centris.sp1 Xylocopa.sp Xylocopa.grisescens
Diplopterys.pubipetala 1368 1364 740 460 416 256 0 328 364 368 0 0 0
Byrsonima.gardnerana 924 320 2108 464 284 0 0 0 28 0 0 0 0
Banisteriopsis.muricata 396 468 108 140 272 652 912 364 44 0 368 164 84
Heteropterys.sp1 764 680 528 308 404 300 0 28 0 0 0 76 0
Heteropterys.sp2 740 656 528 332 0 324 0 116 116 0 0 0 0
Dicella.bracteosa 556 512 356 132 524 0 0 0 0 0 0 0 0
Carolus.chasei 604 452 432 200 0 0 0 0 0 0 0 0 0
Stigmaphyllon.paralias 504 816 0 0 0 0 0 0 0 0 0 0 0
Banisteriopsis.stellaris 292 300 244 116 0 0 0 0 0 0 0 0 0
Banisteriopsis.schizoptera 228 224 124 120 0 0 0 0 0 0 0 0 0
Stigmaphyllon.auriculatum 240 164 68 0 196 0 0 0 0 0 0 0 0
Stigmaphyllon.ciliatum 268 196 0 0 164 0 0 0 0 0 0 0 0
Janusia.anisandra 188 244 0 96 0 0 0 0 0 0 0 0 0

2. Graficar

Cuando los datos no se encuentren organizados de mayor a menor se debe usar antes la funcion sortweb() sobre los datos

plotweb(bezerra2009, method="normal", text.rot="90",
labsize=0.9, col.low="#CDCD00", col.high="#27408B", col.interaction="cornsilk4")

Estas interacciones tambien se pueden graficar de otra manera a traves de la funcion visweb()

visweb(bezerra2009, plotsize=9)

Usando el paquete NetworkD3

Paquetes necesarios

library(networkD3)
library(tidyverse)
library(bipartite)

1. Convertimos la matrix de datos a un Data Frame

datos <- bezerra2009 %>% as_tibble(rownames = "source")

2. Covertimos la tabla a la forma adecuada para ser leida por el paquete

links <- datos %>% 
        pivot_longer(2:14, names_to = "target", values_to = "value")

3. Creamos un Data Frame con todas especies de plantas

nodes <- data.frame(
        name=c(as.character(links$source), 
               as.character(links$target)) %>% unique()
)

4. Hacer las conecciones con un ID.

links$IDsource <- match(links$source, nodes$name)-1 
links$IDtarget <- match(links$target, nodes$name)-1

5. Hacer el plot

sankeyNetwork(Links = links, Nodes = nodes,
                   Source = "IDsource", Target = "IDtarget",
                   Value = "value", NodeID = "name", 
                   sinksRight=F, fontSize = 10)
Byrsonima.gardnerana → Centris.caxiensis
2,108 
Diplopterys.pubipetala → Centris.aenea
1,368 
Diplopterys.pubipetala → Centris.fuscata
1,364 
Byrsonima.gardnerana → Centris.aenea
924 
Banisteriopsis.muricata → Centris.obsoleta
912 
Stigmaphyllon.paralias → Centris.fuscata
816 
Heteropterys.sp1 → Centris.aenea
764 
Diplopterys.pubipetala → Centris.caxiensis
740 
Heteropterys.sp2 → Centris.aenea
740 
Heteropterys.sp1 → Centris.fuscata
680 
Heteropterys.sp2 → Centris.fuscata
656 
Banisteriopsis.muricata → Centris.trigonoides
652 
Carolus.chasei → Centris.aenea
604 
Dicella.bracteosa → Centris.aenea
556 
Heteropterys.sp1 → Centris.caxiensis
528 
Heteropterys.sp2 → Centris.caxiensis
528 
Dicella.bracteosa → Centris.flavifrons
524 
Dicella.bracteosa → Centris.fuscata
512 
Stigmaphyllon.paralias → Centris.aenea
504 
Banisteriopsis.muricata → Centris.fuscata
468 
Byrsonima.gardnerana → Centris.tarsata
464 
Diplopterys.pubipetala → Centris.tarsata
460 
Carolus.chasei → Centris.fuscata
452 
Carolus.chasei → Centris.caxiensis
432 
Diplopterys.pubipetala → Centris.flavifrons
416 
Heteropterys.sp1 → Centris.flavifrons
404 
Banisteriopsis.muricata → Centris.aenea
396 
Diplopterys.pubipetala → Centris.sp3
368 
Banisteriopsis.muricata → Centris.sp1
368 
Diplopterys.pubipetala → Apis.mellifera
364 
Banisteriopsis.muricata → Epicharis.sp2
364 
Dicella.bracteosa → Centris.caxiensis
356 
Heteropterys.sp2 → Centris.tarsata
332 
Diplopterys.pubipetala → Epicharis.sp2
328 
Heteropterys.sp2 → Centris.trigonoides
324 
Byrsonima.gardnerana → Centris.fuscata
320 
Heteropterys.sp1 → Centris.tarsata
308 
Heteropterys.sp1 → Centris.trigonoides
300 
Banisteriopsis.stellaris → Centris.fuscata
300 
Banisteriopsis.stellaris → Centris.aenea
292 
Byrsonima.gardnerana → Centris.flavifrons
284 
Banisteriopsis.muricata → Centris.flavifrons
272 
Stigmaphyllon.ciliatum → Centris.aenea
268 
Diplopterys.pubipetala → Centris.trigonoides
256 
Banisteriopsis.stellaris → Centris.caxiensis
244 
Janusia.anisandra → Centris.fuscata
244 
Stigmaphyllon.auriculatum → Centris.aenea
240 
Banisteriopsis.schizoptera → Centris.aenea
228 
Banisteriopsis.schizoptera → Centris.fuscata
224 
Carolus.chasei → Centris.tarsata
200 
Stigmaphyllon.auriculatum → Centris.flavifrons
196 
Stigmaphyllon.ciliatum → Centris.fuscata
196 
Janusia.anisandra → Centris.aenea
188 
Banisteriopsis.muricata → Xylocopa.sp
164 
Stigmaphyllon.auriculatum → Centris.fuscata
164 
Stigmaphyllon.ciliatum → Centris.flavifrons
164 
Banisteriopsis.muricata → Centris.tarsata
140 
Dicella.bracteosa → Centris.tarsata
132 
Banisteriopsis.schizoptera → Centris.caxiensis
124 
Banisteriopsis.schizoptera → Centris.tarsata
120 
Heteropterys.sp2 → Epicharis.sp2
116 
Heteropterys.sp2 → Apis.mellifera
116 
Banisteriopsis.stellaris → Centris.tarsata
116 
Banisteriopsis.muricata → Centris.caxiensis
108 
Janusia.anisandra → Centris.tarsata
96 
Banisteriopsis.muricata → Xylocopa.grisescens
84 
Heteropterys.sp1 → Xylocopa.sp
76 
Stigmaphyllon.auriculatum → Centris.caxiensis
68 
Banisteriopsis.muricata → Apis.mellifera
44 
Byrsonima.gardnerana → Apis.mellifera
28 
Heteropterys.sp1 → Epicharis.sp2
28 
Diplopterys.pubipetala → Centris.obsoleta
0 
Diplopterys.pubipetala → Centris.sp1
0 
Diplopterys.pubipetala → Xylocopa.sp
0 
Diplopterys.pubipetala → Xylocopa.grisescens
0 
Byrsonima.gardnerana → Centris.trigonoides
0 
Byrsonima.gardnerana → Centris.obsoleta
0 
Byrsonima.gardnerana → Epicharis.sp2
0 
Byrsonima.gardnerana → Centris.sp3
0 
Byrsonima.gardnerana → Centris.sp1
0 
Byrsonima.gardnerana → Xylocopa.sp
0 
Byrsonima.gardnerana → Xylocopa.grisescens
0 
Banisteriopsis.muricata → Centris.sp3
0 
Heteropterys.sp1 → Centris.obsoleta
0 
Heteropterys.sp1 → Apis.mellifera
0 
Heteropterys.sp1 → Centris.sp3
0 
Heteropterys.sp1 → Centris.sp1
0 
Heteropterys.sp1 → Xylocopa.grisescens
0 
Heteropterys.sp2 → Centris.flavifrons
0 
Heteropterys.sp2 → Centris.obsoleta
0 
Heteropterys.sp2 → Centris.sp3
0 
Heteropterys.sp2 → Centris.sp1
0 
Heteropterys.sp2 → Xylocopa.sp
0 
Heteropterys.sp2 → Xylocopa.grisescens
0 
Dicella.bracteosa → Centris.trigonoides
0 
Dicella.bracteosa → Centris.obsoleta
0 
Dicella.bracteosa → Epicharis.sp2
0 
Dicella.bracteosa → Apis.mellifera
0 
Dicella.bracteosa → Centris.sp3
0 
Dicella.bracteosa → Centris.sp1
0 
Dicella.bracteosa → Xylocopa.sp
0 
Dicella.bracteosa → Xylocopa.grisescens
0 
Carolus.chasei → Centris.flavifrons
0 
Carolus.chasei → Centris.trigonoides
0 
Carolus.chasei → Centris.obsoleta
0 
Carolus.chasei → Epicharis.sp2
0 
Carolus.chasei → Apis.mellifera
0 
Carolus.chasei → Centris.sp3
0 
Carolus.chasei → Centris.sp1
0 
Carolus.chasei → Xylocopa.sp
0 
Carolus.chasei → Xylocopa.grisescens
0 
Stigmaphyllon.paralias → Centris.caxiensis
0 
Stigmaphyllon.paralias → Centris.tarsata
0 
Stigmaphyllon.paralias → Centris.flavifrons
0 
Stigmaphyllon.paralias → Centris.trigonoides
0 
Stigmaphyllon.paralias → Centris.obsoleta
0 
Stigmaphyllon.paralias → Epicharis.sp2
0 
Stigmaphyllon.paralias → Apis.mellifera
0 
Stigmaphyllon.paralias → Centris.sp3
0 
Stigmaphyllon.paralias → Centris.sp1
0 
Stigmaphyllon.paralias → Xylocopa.sp
0 
Stigmaphyllon.paralias → Xylocopa.grisescens
0 
Banisteriopsis.stellaris → Centris.flavifrons
0 
Banisteriopsis.stellaris → Centris.trigonoides
0 
Banisteriopsis.stellaris → Centris.obsoleta
0 
Banisteriopsis.stellaris → Epicharis.sp2
0 
Banisteriopsis.stellaris → Apis.mellifera
0 
Banisteriopsis.stellaris → Centris.sp3
0 
Banisteriopsis.stellaris → Centris.sp1
0 
Banisteriopsis.stellaris → Xylocopa.sp
0 
Banisteriopsis.stellaris → Xylocopa.grisescens
0 
Banisteriopsis.schizoptera → Centris.flavifrons
0 
Banisteriopsis.schizoptera → Centris.trigonoides
0 
Banisteriopsis.schizoptera → Centris.obsoleta
0 
Banisteriopsis.schizoptera → Epicharis.sp2
0 
Banisteriopsis.schizoptera → Apis.mellifera
0 
Banisteriopsis.schizoptera → Centris.sp3
0 
Banisteriopsis.schizoptera → Centris.sp1
0 
Banisteriopsis.schizoptera → Xylocopa.sp
0 
Banisteriopsis.schizoptera → Xylocopa.grisescens
0 
Stigmaphyllon.auriculatum → Centris.tarsata
0 
Stigmaphyllon.auriculatum → Centris.trigonoides
0 
Stigmaphyllon.auriculatum → Centris.obsoleta
0 
Stigmaphyllon.auriculatum → Epicharis.sp2
0 
Stigmaphyllon.auriculatum → Apis.mellifera
0 
Stigmaphyllon.auriculatum → Centris.sp3
0 
Stigmaphyllon.auriculatum → Centris.sp1
0 
Stigmaphyllon.auriculatum → Xylocopa.sp
0 
Stigmaphyllon.auriculatum → Xylocopa.grisescens
0 
Stigmaphyllon.ciliatum → Centris.caxiensis
0 
Stigmaphyllon.ciliatum → Centris.tarsata
0 
Stigmaphyllon.ciliatum → Centris.trigonoides
0 
Stigmaphyllon.ciliatum → Centris.obsoleta
0 
Stigmaphyllon.ciliatum → Epicharis.sp2
0 
Stigmaphyllon.ciliatum → Apis.mellifera
0 
Stigmaphyllon.ciliatum → Centris.sp3
0 
Stigmaphyllon.ciliatum → Centris.sp1
0 
Stigmaphyllon.ciliatum → Xylocopa.sp
0 
Stigmaphyllon.ciliatum → Xylocopa.grisescens
0 
Janusia.anisandra → Centris.caxiensis
0 
Janusia.anisandra → Centris.flavifrons
0 
Janusia.anisandra → Centris.trigonoides
0 
Janusia.anisandra → Centris.obsoleta
0 
Janusia.anisandra → Epicharis.sp2
0 
Janusia.anisandra → Apis.mellifera
0 
Janusia.anisandra → Centris.sp3
0 
Janusia.anisandra → Centris.sp1
0 
Janusia.anisandra → Xylocopa.sp
0 
Janusia.anisandra → Xylocopa.grisescens
0 
Diplopterys.pubipetala
5,664
Diplopterys.pubipetala
Byrsonima.gardnerana
4,128
Byrsonima.gardnerana
Banisteriopsis.muricata
3,972
Banisteriopsis.muricata
Heteropterys.sp1
3,088
Heteropterys.sp1
Heteropterys.sp2
2,812
Heteropterys.sp2
Dicella.bracteosa
2,080
Dicella.bracteosa
Carolus.chasei
1,688
Carolus.chasei
Stigmaphyllon.paralias
1,320
Stigmaphyllon.paralias
Banisteriopsis.stellaris
952
Banisteriopsis.stellaris
Banisteriopsis.schizoptera
696
Banisteriopsis.schizoptera
Stigmaphyllon.auriculatum
668
Stigmaphyllon.auriculatum
Stigmaphyllon.ciliatum
628
Stigmaphyllon.ciliatum
Janusia.anisandra
528
Janusia.anisandra
Centris.aenea
7,072
Centris.aenea
Centris.fuscata
6,396
Centris.fuscata
Centris.caxiensis
5,236
Centris.caxiensis
Centris.tarsata
2,368
Centris.tarsata
Centris.flavifrons
2,260
Centris.flavifrons
Centris.trigonoides
1,532
Centris.trigonoides
Centris.obsoleta
912
Centris.obsoleta
Epicharis.sp2
836
Epicharis.sp2
Apis.mellifera
552
Apis.mellifera
Centris.sp3
368
Centris.sp3
Centris.sp1
368
Centris.sp1
Xylocopa.sp
240
Xylocopa.sp
Xylocopa.grisescens
84
Xylocopa.grisescens

Usando el paquete circlize

Paquetes necesarios

library(circlize)
library(tidyverse)

1. Creamos una matrix de datos

valores <- c(500:1000)

muestra <- sample(valores, 15)

col_pal <- c(bee1 = "#6a3d9a", bee2 = "#e31a1c", bee3 = "#ff7f00", bee4 = "#1f78b4", bee5 = "#fb9a99",
             plant1 = "#33a02c", plant2 = "#33a02c" , plant3 = "#33a02c")

tabla <- matrix(muestra, nrow = 5, dimnames = list(c("bee1", "bee2", "bee3", "bee4", "bee5"),
                                                               c("plant1", "plant2", "plant3")))

2. Graficamos

chordDiagram(tabla, grid.col = col_pal)