https://github.com/usccana/netplot
Beautiful graph drawing
https://github.com/usccana/netplot
graph-visualization igraph netsci network-analysis network-visualization rpackage rstats sna statnet
Last synced: 9 months ago
JSON representation
Beautiful graph drawing
- Host: GitHub
- URL: https://github.com/usccana/netplot
- Owner: USCCANA
- License: other
- Created: 2018-04-25T19:36:25.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-11-15T15:40:57.000Z (over 1 year ago)
- Last Synced: 2025-06-21T15:51:28.663Z (9 months ago)
- Topics: graph-visualization, igraph, netsci, network-analysis, network-visualization, rpackage, rstats, sna, statnet
- Language: R
- Homepage: https://usccana.github.io/netplot/
- Size: 115 MB
- Stars: 51
- Watchers: 3
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: NEWS.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[](https://cran.r-project.org/package=netplot)
[](https://cran.r-project.org/package=netplot)
[](https://cran.r-project.org/package=netplot)
[](https://github.com/USCCANA/netplot/actions/workflows/ci.yml)
[](https://preventivemedicine.usc.edu)
# netplot
An alternative graph visualization tool that emphasizes aesthetics,
providing default parameters that deliver out-of-the-box lovely
visualizations.
Some features:
1. Auto-scaling of vertices using sizes relative to the plotting
device.
2. Embedded edge color mixer.
3. True curved edges drawing.
4. User-defined edge curvature.
5. Nicer vertex frame color.
6. Better use of space-filling the plotting device.
The package uses the `grid` plotting system (just like `ggplot2`).
## Installation
You can install the released version of netplot from
[CRAN](https://CRAN.R-project.org) with:
``` r
install.packages("netplot")
```
And the development version from [GitHub](https://github.com/) with:
``` r
# install.packages("devtools")
devtools::install_github("USCCANA/netplot")
```
## Example
This is a basic example which shows you how to solve a common problem:
``` r
library(igraph)
#>
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:stats':
#>
#> decompose, spectrum
#> The following object is masked from 'package:base':
#>
#> union
library(netplot)
#> Loading required package: grid
#>
#> Attaching package: 'netplot'
#> The following object is masked from 'package:igraph':
#>
#> ego
set.seed(1)
data("UKfaculty", package = "igraphdata")
l <- layout_with_fr(UKfaculty)
#> This graph was created by an old(er) igraph version.
#> Call upgrade_graph() on it to use with the current igraph version
#> For now we convert it on the fly...
plot(UKfaculty, layout = l) # ala igraph
```

``` r
V(UKfaculty)$ss <- runif(vcount(UKfaculty))
nplot(UKfaculty, layout = l) # ala netplot
```

``` r
sna::gplot(intergraph::asNetwork(UKfaculty), coord=l)
```

### UKfaculty
``` r
# Random names
set.seed(1)
nam <- sample(babynames::babynames$name, vcount(UKfaculty))
ans <- nplot(
UKfaculty,
layout = l,
vertex.color = ~ Group,
vertex.nsides = ~ Group,
vertex.label = nam,
vertex.size.range = c(.01, .03, 4),
bg.col = "transparent",
vertex.label.show = .25,
vertex.label.range = c(10, 25),
edge.width.range = c(1, 4, 5),
vertex.label.fontfamily = "sans"
)
# Plot it!
ans
```

Starting version 0.2-0, we can use gradients!
``` r
ans |>
set_vertex_gpar(
element = "core",
fill = lapply(get_vertex_gpar(ans, "frame", "col")$col, \(i) {
radialGradient(c("white", i), cx1=.8, cy1=.8, r1=0)
}))
```

### USairports
``` r
# Loading the data
data(USairports, package="igraphdata")
# Generating a layout naively
layout <- V(USairports)$Position
#> This graph was created by an old(er) igraph version.
#> Call upgrade_graph() on it to use with the current igraph version
#> For now we convert it on the fly...
layout <- do.call(rbind, lapply(layout, function(x) strsplit(x, " ")[[1]]))
layout[] <- stringr::str_remove(layout, "^[a-zA-Z]+")
layout <- matrix(as.numeric(layout[]), ncol=2)
# Some missingness
layout[which(!complete.cases(layout)), ] <- apply(layout, 2, mean, na.rm=TRUE)
# Have to rotate it (it doesn't matter the origin)
layout <- netplot:::rotate(layout, c(0,0), pi/2)
# Simplifying the network
net <- simplify(USairports, edge.attr.comb = list(
weight = "sum",
name = "concat",
Passengers = "sum",
"ignore"
))
# Pretty graph
nplot(
net,
layout = layout,
edge.width = ~ Passengers,
edge.color = ~
ego(col = "white", alpha = 0) +
alter(col = "yellow", alpha = .75),
skip.vertex = TRUE,
skip.arrows = TRUE,
edge.width.range = c(.75, 4, 4),
bg.col = "black",
edge.line.breaks = 10
)
```