2017-06-18 7 views
1

Je possède ce jeu de données:nœuds de couleur en fonction de la condition dans un graphique

df <- structure(list(name = structure(c(1L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 2L), .Label = c("node1", "node10", "node2", "node3", 
"node4", "node5", "node6", "node7", "node8", "node9"), class = "factor"), 
    value = c(100L, 14L, 2L, 0L, 25L, 0L, 0L, 43L, 7L, 0L)), .Names = c("name", 
"value"), class = "data.frame", row.names = c(NA, -10L)) 

et je voudrais les nœuds qui ont une valeur égale à 0 ont la couleur rouge et les noeuds ayant une valeur égale ou supérieure à avoir rouge la couleur et leur cercle sont plus grands selon la valeur de la valeur.

Est-il possible de le faire en utilisant igraph?

Jeu de données avec des bords. Entrée dataframe:

EDIT de commentaire

J'ai fait cet ensemble de données basé sur les livres et les citations. Livres = noeuds et citations = lien. Chaque livre est unique et a des citations. La citation pourrait être commune à plus d'un livre. C'est pourquoi link1 est dans plusieurs colonnes. Les link44 jusqu'à link100 sont des citations mais qui n'existent que dans book1 mais pas dans d'autres livres. Parce que les livres et les citations ont des mots comme des titres et afin de faire un graphique, il pourrait ne pas être utile, j'ai changé les titres de livres à des noeuds avec numérotation et des citations à des liens dont la numérotation. Références bibliographiques qui sont communs à plus d'un livre l'ont le même ID i.e.link1

dput(df) 
structure(list(node1 = structure(c(1L, 13L, 24L, 35L, 46L, 57L, 
68L, 79L, 90L, 2L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 25L, 26L, 27L, 28L, 
29L, 30L, 31L, 32L, 33L, 34L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 
43L, 44L, 45L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 
58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 69L, 70L, 71L, 
72L, 73L, 74L, 75L, 76L, 77L, 78L, 80L, 81L, 82L, 83L, 84L, 85L, 
86L, 87L, 88L, 89L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 
100L, 3L), .Label = c("link1", "link10", "link100", "link11", 
"link12", "link13", "link14", "link15", "link16", "link17", "link18", 
"link19", "link2", "link20", "link21", "link22", "link23", "link24", 
"link25", "link26", "link27", "link28", "link29", "link3", "link30", 
"link31", "link32", "link33", "link34", "link35", "link36", "link37", 
"link38", "link39", "link4", "link40", "link41", "link42", "link43", 
"link44", "link45", "link46", "link47", "link48", "link49", "link5", 
"link50", "link51", "link52", "link53", "link54", "link55", "link56", 
"link57", "link58", "link59", "link6", "link60", "link61", "link62", 
"link63", "link64", "link65", "link66", "link67", "link68", "link69", 
"link7", "link70", "link71", "link72", "link73", "link74", "link75", 
"link76", "link77", "link78", "link79", "link8", "link80", "link81", 
"link82", "link83", "link84", "link85", "link86", "link87", "link88", 
"link89", "link9", "link90", "link91", "link92", "link93", "link94", 
"link95", "link96", "link97", "link98", "link99"), class = "factor"), 
    node2 = structure(c(1L, 9L, 10L, 11L, 12L, 13L, 14L, 2L, 
    3L, 4L, 5L, 6L, 7L, 8L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA), .Label = c("link1", "link10", "link11", "link12", 
    "link13", "link14", "link15", "link16", "link4", "link5", 
    "link6", "link7", "link8", "link9"), class = "factor"), node3 = structure(c(1L, 
    2L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), .Label = c("link1", 
    "link2"), class = "factor"), node4 = c(NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA), node5 = structure(c(1L, 12L, 19L, 20L, 
    21L, 22L, 23L, 24L, 25L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
    10L, 11L, 13L, 14L, 15L, 16L, 17L, 18L, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Label = c("link1", 
    "link10", "link11", "link12", "link13", "link14", "link15", 
    "link16", "link17", "link18", "link19", "link2", "link20", 
    "link21", "link22", "link23", "link24", "link25", "link3", 
    "link4", "link5", "link6", "link7", "link8", "link9"), class = "factor"), 
    node6 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), node7 = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), node8 = structure(c(1L, 
    12L, 23L, 34L, 39L, 40L, 41L, 42L, 43L, 2L, 3L, 4L, 5L, 6L, 
    7L, 8L, 9L, 10L, 11L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 
    20L, 21L, 22L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 
    33L, 35L, 36L, 37L, 38L, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA), .Label = c("link1", "link10", "link11", 
    "link12", "link13", "link14", "link15", "link16", "link17", 
    "link18", "link19", "link2", "link20", "link21", "link22", 
    "link23", "link24", "link25", "link26", "link27", "link28", 
    "link29", "link3", "link30", "link31", "link32", "link33", 
    "link34", "link35", "link36", "link37", "link38", "link39", 
    "link4", "link40", "link41", "link42", "link43", "link5", 
    "link6", "link7", "link8", "link9"), class = "factor"), node9 = structure(c(1L, 
    2L, 3L, 4L, 5L, 6L, 7L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA), .Label = c("link1", 
    "link2", "link3", "link4", "link5", "link6", "link7"), class = "factor"), 
    node10 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("node1", 
"node2", "node3", "node4", "node5", "node6", "node7", "node8", 
"node9", "node10"), class = "data.frame", row.names = c(NA, -100L 
)) 

Dans le graphique chaque noeud représenté par un cercle dont le diamètre est proportionnel au nombre de fréquences. Les noms de colonnes sont les nœuds et les liens dans chaque ligne sont les éléments de connexion.

Comment est-il possible de donner aux nœuds de liaison une couleur jaune et les nœuds à 0 fréquence un nœud de rouge?

+0

Vous ne semblez pas avoir d'arêtes dans votre graphique? – user20650

+0

@ user20650 oui je n'ai aucun bord. – Sasak

+2

ok, vous pouvez colorier les sommets en réglant 'V (g) $ color' (voir [this] (https://stackoverflow.com/questions/15999877/correctly-color-vertices-in-r-igraph)) et ajuster taille de vertex en définissant 'vertex.size' lors du traçage (voir [this] (https://stackoverflow.com/questions/12058556/ajustement-le-node-size-in-igraph-using-a-matrix)) – user20650

Répondre

2
# As the links are in the same row index under each node they 
# can be converted to 1/0 (presence of link/not) by 
# the links being missing or otherwise 
# From this you can create adjacency matrix between the nodes by 
# taking the crossproduct 
x <- as.matrix(df) 
x <- !is.na(x) 
adjMat <- crossprod(x) 

library(igraph) 

# Read in the adjacency matrix 
g = graph_from_adjacency_matrix(adjMat, mode="undirected", weighted=TRUE, diag=FALSE) 

# For your original question 
# set colour by setting V(g)$color attribute 
# if diagonal is nonzero vertex colour is red else blue 
V(g)$color <- ifelse(diag(adjMat), "red", "blue") 
# Similarily for size: here vertex size is set to the number of 
# citations each book has (the diagonal of adj matrix) 
V(g)$size <- diag(adjMat) 

# Plot setting the edge weight equal to the number of shared links 
plot(g, edge.width=E(g)$weight/2) 

# If you want to remove the nodes with zero citations 
# probably an igraph function to do this but you can do it manually 
g1 <- g - paste0("node", which(diag(adjMat)==0)) 
plot(g1, edge.width=E(g1)$weight/2)