GgNetView
ggNetView is an R package for network analysis and visualization. It provides flexible and publication-ready tools for exploring complex biological and ecological networks.
Install / Use
/learn @Jiawang1209/GgNetViewREADME
ggNetView <img src="man/figures/logo.png" align="right" width="240" hight="240" />
<!-- badges: start --> <!-- badges: end -->ggNetView is an R package for network analysis and visualization. It provides flexible and publication-ready tools for exploring complex biological and ecological networks.
</br> </br> </br>
Installation
You can install the development version of ggNetView from GitHub with:
# install.packages("devtools")
devtools::install_github("Jiawang1209/ggNetView")
Example1
Step1: load ggNetView
library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.5.2
library(ggnewscale)
library(ggNetView)
#>
#> ░██ ░██
#> ░██
#> ░████████ ░████████ ░████████ ░███████ ░████████ ░██ ░██ ░██ ░███████ ░██ ░██ ░██
#> ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██ ░██ ░██ ░██
#> ░██ ░██ ░██ ░██ ░██ ░██ ░█████████ ░██ ░██ ░██ ░██░█████████ ░██ ░████ ░██
#> ░██ ░███ ░██ ░███ ░██ ░██ ░██ ░██ ░██░██ ░██░██ ░██░██ ░██░██
#> ░█████░██ ░█████░██ ░██ ░██ ░███████ ░████ ░███ ░██ ░███████ ░███ ░███
#> ░██ ░██
#> ░███████ ░███████
#>
#>
#> Yue Liu, Chao Wang (2026). ggNetView: An R Package for Reproducible and Deterministic Network Analysis and Visualization.
#>
#> Maintainers:
#> - Yue Liu <yueliu@iae.ac.cn>
#> - Chao Wang <cwang@iae.ac.cn>
#>
#> Manual: https://jiawang1209.github.io/ggNetView-manual/
#> GitHub: https://github.com/Jiawang1209/ggNetView
#> Bug Reports: https://github.com/Jiawang1209/ggNetView/issues
#>
#>
#> Type citation('ggNetView') for how to cite this package.
#> Run browseVignettes('ggNetView') for documentation.
#>
Step2: load Data
You can load raw matrix
data("otu_tab")
otu_tab[1:5, 1:5]
#> KO1 KO2 KO3 KO4 KO5
#> ASV_1 1113 1968 816 1372 1062
#> ASV_2 1922 1227 2355 2218 2885
#> ASV_3 568 460 899 902 1226
#> ASV_4 1433 400 535 759 1287
#> ASV_6 882 673 819 888 1475
You can load rarely matrix. Note : the rownames of
otu_rareis the features.
data("otu_rare")
otu_tab[1:5, 1:5]
#> KO1 KO2 KO3 KO4 KO5
#> ASV_1 1113 1968 816 1372 1062
#> ASV_2 1922 1227 2355 2218 2885
#> ASV_3 568 460 899 902 1226
#> ASV_4 1433 400 535 759 1287
#> ASV_6 882 673 819 888 1475
data("otu_rare_relative")
otu_rare_relative[1:5, 1:5]
#> KO1 KO2 KO3 KO4 KO5
#> ASV_1 0.03306667 0.05453333 0.02013333 0.03613333 0.02686667
#> ASV_2 0.05750000 0.03393333 0.06046667 0.05810000 0.07320000
#> ASV_3 0.01733333 0.01296667 0.02290000 0.02336667 0.03106667
#> ASV_4 0.04266667 0.01093333 0.01416667 0.01933333 0.03346667
#> ASV_6 0.02646667 0.01856667 0.02110000 0.02353333 0.03806667
You can load node annotation. Note : the rownames of
tax_tabis NULL.
data("tax_tab")
tax_tab[1:5, 1:5]
#> # A tibble: 5 × 5
#> OTUID Kingdom Phylum Class Order
#> <chr> <chr> <chr> <chr> <chr>
#> 1 ASV_2 Archaea Thaumarchaeota Unassigned Nitrososphaerales
#> 2 ASV_3 Bacteria Verrucomicrobia Spartobacteria Unassigned
#> 3 ASV_31 Bacteria Actinobacteria Actinobacteria Actinomycetales
#> 4 ASV_27 Archaea Thaumarchaeota Unassigned Nitrososphaerales
#> 5 ASV_9 Bacteria Unassigned Unassigned Unassigned
Step3: create graph object
obj <- build_graph_from_mat(
mat = otu_rare_relative,
transfrom.method = "none",
method = "WGCNA",
cor.method = "pearson",
proc = "BH",
r.threshold = 0.7,
p.threshold = 0.05,
node_annotation = tax_tab
)
obj
#> # A tbl_graph: 2049 nodes and 9602 edges
#> #
#> # An undirected simple graph with 100 components
#> #
#> # Node Data: 2,049 × 14 (active)
#> name modularity modularity2 modularity3 Modularity Degree Strength Kingdom
#> <chr> <fct> <ord> <chr> <ord> <dbl> <dbl> <chr>
#> 1 ASV_916 1 1 1 1 58 50.5 Bacter…
#> 2 ASV_777 1 1 1 1 58 48.7 Bacter…
#> 3 ASV_606 1 1 1 1 55 45.8 Bacter…
#> 4 ASV_740 1 1 1 1 54 47.2 Bacter…
#> 5 ASV_14… 1 1 1 1 54 44.5 Bacter…
#> 6 ASV_23… 1 1 1 1 54 47.4 Bacter…
#> 7 ASV_15… 1 1 1 1 52 45.3 Bacter…
#> 8 ASV_24… 1 1 1 1 52 43.0 Bacter…
#> 9 ASV_19… 1 1 1 1 52 43.0 Bacter…
#> 10 ASV_568 1 1 1 1 51 45.1 Bacter…
#> # ℹ 2,039 more rows
#> # ℹ 6 more variables: Phylum <chr>, Class <chr>, Order <chr>, Family <chr>,
#> # Genus <chr>, Species <chr>
#> #
#> # Edge Data: 9,602 × 5
#> from to weight correlation corr_direction
#> <int> <int> <dbl> <dbl> <chr>
#> 1 1771 1825 0.793 0.793 Positive
#> 2 594 597 0.895 0.895 Positive
#> 3 588 597 0.864 0.864 Positive
#> # ℹ 9,599 more rows
Step4: ggNetView to plot
Basic network plot
p1 <- ggNetView(
graph_obj = obj,
layout = "gephi",
layout.module = "adjacent",
group.by = "Modularity",
fill.by = "Modularity",
pointsize = c(1, 5),
center = F,
jitter = F,
mapping_line = F,
shrink = 0.9,
linealpha = 0.2,
linecolor = "#d9d9d9"
)
p1
<img src="man/figures/README-unnamed-chunk-8-1.png" alt="" width="100%" style="display: block; margin: auto;" />
ggsave(file = "Output/p1.pdf",
plot = p1,
height = 10,
width = 10)
Add outer line in netwotk plot
p2 <- ggNetView(
graph_obj = obj,
layout = "gephi",
layout.module = "adjacent",
group.by = "Modularity",
fill.by = "Modularity",
pointsize = c(1, 5),
center = F,
jitter = TRUE,
jitter_sd = 0.15,
mapping_line = TRUE,
shrink = 0.9,
linealpha = 0.2,
linecolor = "#d9d9d9",
add_outer = T,
label = T
)
#> Coordinate system already present.
#> ℹ Adding new coordinate system, which will replace the existing one.
p2
#> Warning: No shared levels found between `names(values)` of the manual scale and the
#> data's fill values.
<img src="man/figures/README-unnamed-chunk-9-1.png" alt="" width="100%" style="display: block; margin: auto;" />
ggsave(file = "Output/p2.pdf",
plot = p2,
height = 10,
width = 10)
Change the fill of node points.
p3 <- ggNetView(
graph_obj = obj,
layout = "gephi",
layout.module = "adjacent",
group.by = "Modularity",
fill.by = "Phylum",
pointsize = c(1, 5),
center = F,
jitter = TRUE,
jitter_sd = 0.15,
mapping_line = TRUE,
shrink = 0.9,
linealpha = 0.2,
linecolor = "#d9d9d9",
add_outer = T,
label = T
)
#> Coordinate system already present.
#> ℹ Adding new coordinate system, which will replace the existing one.
p3
#> Warning: No shared levels found between `names(values)` of the manual scale and the
#> data's fill values.
<img src="man/figures/README-unnamed-chunk-10-1.png" alt="" width="100%" style="display: block; margin: auto;" />
ggsave(file = "Output/p3.pdf",
plot = p3,
height = 10,
width = 10)
Change the color of node points.
p4 <- ggNetView(
graph_obj = obj,
layout = "gephi",
layout.module = "adjacent",
group.by = "Modularity",
fill.by = "Phylum",
color.by = "Phylum",
pointsize = c(1, 5),
center = F,
jitter = TRUE,
jitter_sd = 0.15,
mapping_line = TRUE,
shrink = 0.9,
linealpha = 0.2,
linecolor = "#d9d9d9",
add_outer = T,
label = T
)
#> Coordinate system already present.
#> ℹ Adding new coordinate system, which will replace the existing one.
p4
#> Warning: No shared levels found between `names(values)` of the manual scale and the
#> data's fill values.
<img src="man/figures/README-unnamed-chunk-11-1.png" alt="" width="100%" style="display: block; margin: auto;" />
ggsave(file = "Output/p4.pdf",
plot = p4,
height = 10,
width = 10)
Add node label
p5 <- ggNetView(
graph_obj = obj,
layout = "gephi",
layout.module = "adjacent",
group.by = "Modularity",
fill.by = "Modularity",
pointsize = c(1, 5),
center = F,
jitter = TRUE,
jitter_sd = 0.15,
mapping_line = TRUE,
shrink = 0.9,
linealpha = 0.2,
linecolor = "#d9d9d9",
add_outer = T,
label = T,
pointlabel = "top1"
)
#> Coordinate system already present.
#> ℹ Adding new coordinate system, which will replace the existing one.
p5
#> Warning: No shared levels found between `names(values)` of the manual scale and the
#> data's fill values.
<img src="man/figures/README-unnamed-chunk-12-1.png" alt="" width="100%" style="display: block; margin: auto;" />
ggsave(file = "Output/p3.pdf",
plot = p5,
height = 10,
width = 10)
Example2
Get information of graph_object
Sub_module_1 <- get_subgraph(graph_obj = obj, select_module = "1")
#> Module Number
#> 1 1 416
#> 2 7 161
#> 3 6 137
#> 4 9 121
#> 5 4 112
#> 6 2 105
#> 7 3 104
#> 8 11 101
#> 9 8 87
#> 10 10 80
#> 11 5 78
#> 12 13 70
#> 13 16 52
#> 14 15 51
#> 15 14 46
#> 16 Others 328
names(Sub_module_1)
#> [1] "sub_graph_all" "stat_module" "sub_graph_select"
Example3
# load test data i
