मेरे पास कुछ डेटा है जो लोगों के बीच ट्विटर कनेक्शन दिखाता है (यानी वे लोग जो अन्य उपयोगकर्ताओं को अपने ट्वीट्स में टैग करते हैं) और लोगों के बीच कनेक्शन को मैप करना चाहते हैं। कुछ मामलों में संबंध पारस्परिक होते हैं, क्योंकि दोनों में लोगों ने दूसरे को टैग किया है जबकि कुछ लोगों को टैग किया गया है लेकिन ट्वीट नहीं किया है।

नीचे दिए गए उदाहरण में, व्यक्ति ए ने व्यक्ति बी और व्यक्ति सी को टैग किया है, जबकि व्यक्ति सी ने केवल व्यक्ति बी को टैग किया है। तीर व्यक्ति ए -> व्यक्ति सी और व्यक्ति सी -> व्यक्ति बी से यूनिडायरेक्शनल हैं, लेकिन व्यक्ति ए के बीच द्विदिश हैं < -> व्यक्ति बी। क्या इन तीरों को अलग-अलग रंग बनाना संभव है?

library(igraph)

df <- data.frame (from = c("Person A", "Person A", "Person B", "Person C"),
              to = c ("Person B", "Person C", "Person A", "Person B"),
              weight = c (1, 3, 4, 5)
              )

g_1 <- graph.data.frame(df, 
                    directed = TRUE) 

set.seed(123)
plot (g_1,
  edge.width = E(g_1)$weight)

enter image description here

3
GregRousell 18 जुलाई 2019, 16:51

2 जवाब

सबसे बढ़िया उत्तर

E के color तर्क को निर्दिष्ट करते हुए किनारे का रंग चुनना संभव है और is.mutual() फ़ंक्शन के लिए पारस्परिक बढ़त प्राप्त करना संभव है:

E(g_1)$color <- "grey50"
E(g_1)$color[is.mutual(g_1)] = "red"
plot(g_1, edge.width = E(g_1)$weight)

enter image description here

2
Rémi Coulaud 18 जुलाई 2019, 17:47

आप द्विदिश किनारों को रंगीन करने के लिए duplicated() फ़ंक्शन का उपयोग कर सकते हैं (R में igraph में R पारस्परिक किनारों से लिया गया है और संशोधित किया गया है कर्विंग के बजाय कलरिंग के लिए):

E(g_1)[duplicated(E) | duplicated(E,fromLast =TRUE)]$color <- "red"

पूरा उदाहरण:

library(igraph)

df <- data.frame (from = c("Person A", "Person A", "Person B", "Person C"),
                  to = c ("Person B", "Person C", "Person A", "Person B"),
                  weight = c (1, 3, 4, 5)
)

g_1 <- graph.data.frame(df, 
                        directed = TRUE) 

set.seed(123)

E <- t(apply(get.edgelist(g_1),1,sort))
E(g_1)$color <- "grey50"
E(g_1)[duplicated(E) | duplicated(E,fromLast =TRUE)]$color <- "red"

plot (g_1, edge.width = E(g_1)$weight)
1
Frank Schmitt 18 जुलाई 2019, 17:48