J'essaie de produire un tracé en utilisant le package ggnet2 dans R. J'ai créé un réseau (net.bg)

library(igraph)
library(GGally)
library(network)
library(sna)
library(intergraph)

direction <- c(2,1,3,1,4,1,5,1,3,2,4,2,5,2,4,3,5,3,5,4)
gr <- matrix(direction, nrow = 2)
x1 <- 10.59
x2 <- 15.74
x3 <- 5
x4 <- 18
x5 <- 7

RImp <- data.frame(x1,x2,x3,x4,x5)
nam <- names(RImp)
RImp <- as.numeric(RImp)
Rint <- c(2.96, 1.34, 1.27, 1.1, 2.22, 1.24, 3.11,
          2.52, 0.96, 1.08)

net.bg <- make_graph(gr, 5)

Et j'utilise ggnet2 et ggplot2 pour le tracer comme ceci :

library(RColorBrewer)
library(ggnewscale)
library(ggplot2)


colfunction <- colorRampPalette(c("floralwhite", "firebrick1"))
nodeCol <- colfunction(5)

p   <- ggnet2(net.bg, 
              mode = "circle", 
              size = 0,
              #color = RImp,
              label = nam,
              edge.size = Rint, 
              edge.label = Rint,
              edge.color = "grey") +
  theme(legend.text = element_text(size = 10)) +
  geom_label(aes(label = nam),nudge_y = 0.08) +
  geom_point(aes(fill = RImp), size = RImp, col = nodeCol) +
  scale_fill_continuous(name = "Variable\nImportance",
                        limits=c(0, 20), breaks=seq(0, 20, by= 5),
                        low = "floralwhite" ,high = "firebrick1")
p

J'utilise ggplot2 pour tracer les nœuds, au lieu de ggnet2, car cela me permet d'ajouter une légende.

Le code ci-dessus produit un tracé similaire à celui-ci : networkPlot

Comme on peut le voir, les nœuds sont colorés en dégradé, cependant, ils sont colorés dans le sens des aiguilles d'une montre... J'essaie de colorer les nœuds, en fonction de leur taille (ou dans ce cas, les valeurs contenues dans RImp).

Des suggestions sur la façon dont j'y arriverais?

1
Electrino 20 févr. 2020 à 04:19

1 réponse

Meilleure réponse

Le problème est que la forme des points est solide et geom_point utilise "nodeCol" comme couleur pour tout le point (ou plutôt le cercle). Si vous utilisez shape = 21, vous avez la possibilité de modifier à la fois le contour du point (j'utilise du gris ici et le remplissage - qui est maintenant correctement contrôlé par le scale_fill_continuous) :

  ggnet2(net.bg, 
              mode = "circle", 
              size = 0,
              #color = RImp,
              label = nam,
              edge.size = Rint, 
              edge.label = Rint,
              edge.color = "grey") +
  theme(legend.text = element_text(size = 10)) +
  geom_label(aes(label = nam),nudge_y = 0.08) +
  geom_point(aes(fill = RImp), size = RImp, col = "grey", shape = 21) +
  scale_fill_continuous(name = "Variable\nImportance",
                        limits=c(0, 20), breaks=seq(0, 20, by= 5),
                        low = "floralwhite" ,high = "firebrick1")

Si vous faites défiler vers le bas sur https://ggplot2.tidyverse.org/reference/geom_point.html vous trouverez des exemples utilisant différentes formes de points.

1
Wolfgang Arnold 21 févr. 2020 à 10:59