/rgexf

Create, read and write GEXF (Graph Exchange XML Format) graph files (used in Gephi and others) in R.

Primary LanguageROtherNOASSERTION

rgexf: Build, Import and Export GEXF Graph Files

CRAN_Status_Badge Downloads Downloads Travis-CI Build Status AppVeyor Build Status Coverage Status lifecycle

The first R package to work with GEXF graph files (used in Gephi and others). Using XML library, it allows the user to easily build/read graph files including attributes, GEXF viz attributes (such as color, size, and position), network dynamics (for both edges and nodes, including spells) and edges weighting. Users can build/handle graphs element-by-element or massively through data-frames, visualize the graph on a web browser through sigmajs javascript gexf-js library and interact with the igraph package.

News

  • [2020-02-11] Getting ready to put the package on CRAN again (was taken out in the last version).
  • [2016-11-08] Restarting the project.
  • [2015-02-03] Version 0.15.2.3 of rgexf is on CRAN. Just updating emails…
  • [2014-03-10] Version 0.14.9 of rgexf is on CRAN! solves issues 15-18. Thanks =).
  • [2013-08-07] Version 0.13.8 of rgexf is on CRAN! New plot.gexf method and igraph integration working =).
  • [2013-05-09] Version 0.13.05 of rgexf (transitory) solves issues N 9 & 10. Looking forward for the next CRAN version.
  • [2013-03-14] Version 0.13.03 of rgexf is on its way to CRAN. It now supports working with spells!
  • [2013-01-04] Version 0.13.01 of rgexf is on its way to CRAN. Significant improvements and new features!
  • [2012-06-19] Version 0.12.06 of rgexf is on CRAN! Now it can be directly download from R.
  • [2012-03-29] Version 0.12.03.29 of rgexf has been released including many bug fixes. Please download the latest version to check it out.

Installation

To install the latest version of rgexf you can use devtools

library(devtools)
install_github("gvegayon/rgexf")

The more stable (but old) version of rgexf can be found on CRAN too:

install.packages("rgexf")

Example 1: Static net

# Loading the package
library(rgexf)

# Creating a group of individuals and their relations
people <- data.frame(matrix(c(1:4, 'juan', 'pedro', 'matthew', 'carlos'),ncol=2))
people
##   X1      X2
## 1  1    juan
## 2  2   pedro
## 3  3 matthew
## 4  4  carlos
# Defining the relations structure
relations <- data.frame(matrix(c(1,4,1,2,1,3,2,3,3,4,4,2), ncol=2, byrow=T))
relations
##   X1 X2
## 1  1  4
## 2  1  2
## 3  1  3
## 4  2  3
## 5  3  4
## 6  4  2
# Getting things done
write.gexf(people, relations)
## <?xml version="1.0" encoding="UTF-8"?>
## <gexf xmlns="http://www.gexf.net/1.3" xmlns:viz="http://www.gexf.net/1.3/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.3 http://www.gexf.net/1.3/gexf.xsd" version="1.3">
##   <meta lastmodifieddate="2020-02-12">
##     <creator>NodosChile</creator>
##     <description>A GEXF file written in R with "rgexf"</description>
##     <keywords>GEXF, NodosChile, R, rgexf, Gephi</keywords>
##   </meta>
##   <graph mode="static" defaultedgetype="undirected">
##     <nodes>
##       <node id="1" label="juan">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="100" y="10.8967793559009" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="2" label="pedro">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="42.1494909704439" y="-18.4734031409117" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="3" label="matthew">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-92.2784635381173" y="-100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="4" label="carlos">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-100" y="100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##     </nodes>
##     <edges>
##       <edge id="0" source="1" target="4" weight="1"/>
##       <edge id="1" source="1" target="2" weight="1"/>
##       <edge id="2" source="1" target="3" weight="1"/>
##       <edge id="3" source="2" target="3" weight="1"/>
##       <edge id="4" source="3" target="4" weight="1"/>
##       <edge id="5" source="4" target="2" weight="1"/>
##     </edges>
##   </graph>
## </gexf>

Example 2: Dynamic net

# Defining the dynamic structure, note that there are some nodes that have NA at the end.
time<-matrix(c(10.0,13.0,2.0,2.0,12.0,rep(NA,3)), nrow=4, ncol=2)
time
##      [,1] [,2]
## [1,]   10   12
## [2,]   13   NA
## [3,]    2   NA
## [4,]    2   NA
# Getting things done
write.gexf(people, relations, nodeDynamic=time)
## <?xml version="1.0" encoding="UTF-8"?>
## <gexf xmlns="http://www.gexf.net/1.3" xmlns:viz="http://www.gexf.net/1.3/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.3 http://www.gexf.net/1.3/gexf.xsd" version="1.3">
##   <meta lastmodifieddate="2020-02-12">
##     <creator>NodosChile</creator>
##     <description>A GEXF file written in R with "rgexf"</description>
##     <keywords>GEXF, NodosChile, R, rgexf, Gephi</keywords>
##   </meta>
##   <graph mode="dynamic" start="10" end="2" timeformat="double" defaultedgetype="undirected">
##     <nodes>
##       <node id="1" label="juan" start="10" end="12">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-56.8765496496629" y="-100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="2" label="pedro" start="13" end="2">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-100" y="66.0679533091687" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="3" label="matthew" start="2" end="2">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="100" y="-90.1720346528232" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="4" label="carlos" start="2" end="2">
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="5.12273513809573" y="100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##     </nodes>
##     <edges>
##       <edge id="0" source="1" target="4" weight="1"/>
##       <edge id="1" source="1" target="2" weight="1"/>
##       <edge id="2" source="1" target="3" weight="1"/>
##       <edge id="3" source="2" target="3" weight="1"/>
##       <edge id="4" source="3" target="4" weight="1"/>
##       <edge id="5" source="4" target="2" weight="1"/>
##     </edges>
##   </graph>
## </gexf>

Example 3: More complex… Dynamic graph with attributes both for nodes and edges

First we define dynamics

time.nodes<-matrix(c(10.0,13.0,2.0,2.0,12.0,rep(NA,3)), nrow=4, ncol=2)
time.nodes
##      [,1] [,2]
## [1,]   10   12
## [2,]   13   NA
## [3,]    2   NA
## [4,]    2   NA
time.edges<-matrix(c(10.0,13.0,2.0,2.0,12.0,1,5,rep(NA,5)), nrow=6, ncol=2)
time.edges
##      [,1] [,2]
## [1,]   10    5
## [2,]   13   NA
## [3,]    2   NA
## [4,]    2   NA
## [5,]   12   NA
## [6,]    1   NA

Now we define the attribute values

# Defining a data frame of attributes for nodes and edges
node.att <- data.frame(letrafavorita=letters[1:4], numbers=1:4, stringsAsFactors=F)
node.att
##   letrafavorita numbers
## 1             a       1
## 2             b       2
## 3             c       3
## 4             d       4
edge.att <- data.frame(letrafavorita=letters[1:6], numbers=1:6, stringsAsFactors=F)
edge.att
##   letrafavorita numbers
## 1             a       1
## 2             b       2
## 3             c       3
## 4             d       4
## 5             e       5
## 6             f       6
# Getting the things done
write.gexf(nodes=people, edges=relations, edgeDynamic=time.edges,
           edgesAtt=edge.att, nodeDynamic=time.nodes, nodesAtt=node.att)
## <?xml version="1.0" encoding="UTF-8"?>
## <gexf xmlns="http://www.gexf.net/1.3" xmlns:viz="http://www.gexf.net/1.3/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gexf.net/1.3 http://www.gexf.net/1.3/gexf.xsd" version="1.3">
##   <meta lastmodifieddate="2020-02-12">
##     <creator>NodosChile</creator>
##     <description>A GEXF file written in R with "rgexf"</description>
##     <keywords>GEXF, NodosChile, R, rgexf, Gephi</keywords>
##   </meta>
##   <graph mode="dynamic" start="1" end="5" timeformat="double" defaultedgetype="undirected">
##     <attributes class="node" mode="static">
##       <attribute id="att1" title="letrafavorita" type="string"/>
##       <attribute id="att2" title="numbers" type="integer"/>
##     </attributes>
##     <attributes class="edge" mode="static">
##       <attribute id="att1" title="letrafavorita" type="string"/>
##       <attribute id="att2" title="numbers" type="integer"/>
##     </attributes>
##     <nodes>
##       <node id="1" label="juan" start="10" end="12">
##         <attvalues>
##           <attvalue for="att1" value="a"/>
##           <attvalue for="att2" value="1"/>
##         </attvalues>
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="100" y="-100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="2" label="pedro" start="13" end="5">
##         <attvalues>
##           <attvalue for="att1" value="b"/>
##           <attvalue for="att2" value="2"/>
##         </attvalues>
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-4.51394960773801" y="100" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="3" label="matthew" start="2" end="5">
##         <attvalues>
##           <attvalue for="att1" value="c"/>
##           <attvalue for="att2" value="3"/>
##         </attvalues>
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-16.642426934078" y="44.7219195580091" z="0"/>
##         <viz:size value="10"/>
##       </node>
##       <node id="4" label="carlos" start="2" end="5">
##         <attvalues>
##           <attvalue for="att1" value="d"/>
##           <attvalue for="att2" value="4"/>
##         </attvalues>
##         <viz:color r="255" g="99" b="71" a="1"/>
##         <viz:position x="-100" y="34.6122794421364" z="0"/>
##         <viz:size value="10"/>
##       </node>
##     </nodes>
##     <edges>
##       <edge id="0" source="1" target="4" start="10" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="a"/>
##           <attvalue for="att2" value="1"/>
##         </attvalues>
##       </edge>
##       <edge id="1" source="1" target="2" start="13" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="b"/>
##           <attvalue for="att2" value="2"/>
##         </attvalues>
##       </edge>
##       <edge id="2" source="1" target="3" start="2" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="c"/>
##           <attvalue for="att2" value="3"/>
##         </attvalues>
##       </edge>
##       <edge id="3" source="2" target="3" start="2" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="d"/>
##           <attvalue for="att2" value="4"/>
##         </attvalues>
##       </edge>
##       <edge id="4" source="3" target="4" start="12" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="e"/>
##           <attvalue for="att2" value="5"/>
##         </attvalues>
##       </edge>
##       <edge id="5" source="4" target="2" start="1" end="5" weight="1">
##         <attvalues>
##           <attvalue for="att1" value="f"/>
##           <attvalue for="att2" value="6"/>
##         </attvalues>
##       </edge>
##     </edges>
##   </graph>
## </gexf>

Session info

devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 3.6.2 (2019-12-12)
##  os       Ubuntu 18.04.4 LTS          
##  system   x86_64, linux-gnu           
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Los_Angeles         
##  date     2020-02-12                  
## 
## ─ Packages ───────────────────────────────────────────────────────────────────
##  package     * version  date       lib source        
##  assertthat    0.2.1    2019-03-21 [1] CRAN (R 3.6.1)
##  backports     1.1.5    2019-10-02 [1] CRAN (R 3.6.1)
##  callr         3.4.1    2020-01-24 [1] CRAN (R 3.6.2)
##  cli           2.0.1    2020-01-08 [1] CRAN (R 3.6.2)
##  crayon        1.3.4    2017-09-16 [1] CRAN (R 3.6.1)
##  desc          1.2.0    2018-05-01 [1] CRAN (R 3.6.1)
##  devtools      2.2.1    2019-09-24 [1] CRAN (R 3.6.1)
##  digest        0.6.23   2019-11-23 [1] CRAN (R 3.6.1)
##  ellipsis      0.3.0    2019-09-20 [1] CRAN (R 3.6.1)
##  evaluate      0.14     2019-05-28 [1] CRAN (R 3.6.1)
##  fansi         0.4.1    2020-01-08 [1] CRAN (R 3.6.2)
##  fs            1.3.1    2019-05-06 [1] CRAN (R 3.6.1)
##  glue          1.3.1    2019-03-12 [1] CRAN (R 3.6.1)
##  htmltools     0.4.0    2019-10-04 [1] CRAN (R 3.6.1)
##  httpuv        1.5.2    2019-09-11 [1] CRAN (R 3.6.1)
##  igraph        1.2.4.2  2019-11-27 [1] CRAN (R 3.6.1)
##  jsonlite      1.6      2018-12-07 [1] CRAN (R 3.6.1)
##  knitr         1.27     2020-01-16 [1] CRAN (R 3.6.2)
##  later         1.0.0    2019-10-04 [1] CRAN (R 3.6.1)
##  magrittr      1.5      2014-11-22 [1] CRAN (R 3.6.1)
##  memoise       1.1.0    2017-04-21 [1] CRAN (R 3.6.1)
##  pkgbuild      1.0.6    2019-10-09 [1] CRAN (R 3.6.1)
##  pkgconfig     2.0.3    2019-09-22 [1] CRAN (R 3.6.1)
##  pkgload       1.0.2    2018-10-29 [1] CRAN (R 3.6.1)
##  prettyunits   1.1.1    2020-01-24 [1] CRAN (R 3.6.2)
##  processx      3.4.1    2019-07-18 [1] CRAN (R 3.6.1)
##  promises      1.1.0    2019-10-04 [1] CRAN (R 3.6.1)
##  ps            1.3.0    2018-12-21 [1] CRAN (R 3.6.1)
##  R6            2.4.1    2019-11-12 [1] CRAN (R 3.6.1)
##  Rcpp          1.0.3    2019-11-08 [1] CRAN (R 3.6.1)
##  remotes       2.1.0    2019-06-24 [1] CRAN (R 3.6.1)
##  rgexf       * 0.15.999 2020-01-31 [1] local         
##  rlang         0.4.4    2020-01-28 [1] CRAN (R 3.6.2)
##  rmarkdown     2.1      2020-01-20 [1] CRAN (R 3.6.2)
##  rprojroot     1.3-2    2018-01-03 [1] CRAN (R 3.6.1)
##  servr         0.15     2019-08-07 [1] CRAN (R 3.6.1)
##  sessioninfo   1.1.1    2018-11-05 [1] CRAN (R 3.6.1)
##  stringi       1.4.5    2020-01-11 [1] CRAN (R 3.6.2)
##  stringr       1.4.0    2019-02-10 [1] CRAN (R 3.6.1)
##  testthat      2.3.1    2019-12-01 [1] CRAN (R 3.6.1)
##  usethis       1.5.1    2019-07-04 [1] CRAN (R 3.6.1)
##  withr         2.1.2    2018-03-15 [1] CRAN (R 3.6.1)
##  xfun          0.12     2020-01-13 [1] CRAN (R 3.6.2)
##  XML           3.99-0.3 2020-01-20 [1] CRAN (R 3.6.2)
##  yaml          2.2.0    2018-07-25 [1] CRAN (R 3.6.1)
## 
## [1] /home/george/R/x86_64-pc-linux-gnu-library/3.6
## [2] /usr/local/lib/R/site-library
## [3] /usr/lib/R/site-library
## [4] /usr/lib/R/library