3.0The Network Makeup Artist
0 nodes 0 edges 0 channels 0 groups

Delete file

Export image

Saves the current view as it looks, including group shading, shapes and labels.

Format

.png
Drag nodes · Shift-drag or Shift-click to select several · scroll to zoom · double-click to recenter
100%

Source
Target
Direction
Edge ID

The Network Makeup Artist

See how annotated groups sit in a network: bubble sets, hulls and fog clouds, pie nodes and shapes, group-aware layouts, numeric values, a 3D view, communities, enrichment and network comparison.

Bubble-set groups outlines that hug only the members −2 0 2 log2FC Numeric values color scales, sizes, legends, steps Ribosome Proteasome Spliceosome Glycolysis −log10 FDR Communities and enrichment Leiden, MCL, Walktrap; term tests 3D network rotate, tilt and zoom freely A B C shared edges Compare networks UpSet plots, Venn diagrams, statistics
  1. Load a networkupload files, fetch one from a database, or open an example
  2. Add groups and valuesannotations, expression colors or numbers, communities
  3. Arrange, analyse, sharelayouts, statistics, images, Arena3D, Cytoscape, Gephi

NORMA 3.0 runs in your browser: your files stay on this computer, except what you send to online databases or Arena3D yourself. Networks of up to 5,000 nodes.

Network Profiler

Topology statistics for one or more networks, computed the way igraph computes them. Each network is treated as a simple undirected graph: self-loops and parallel edges are set aside first.

Networks to profile

Group analysis (current view)

Statistics of the ticked groups of the current view, the network of groups, and an enrichment test, all on the shown part of the view (ticked groups and channels).

Enrichment

Tests whether groups of an annotation (terms) are over-represented, with a one-sided hypergeometric test and Benjamini–Hochberg FDR per tested set.

Layout benchmark

Runs every layout on the current view (its ticked groups and channels) without changing it, and scores how well each separates the groups: the silhouette width of the node positions (higher is better), the share of nodes inside another group's outline, and how much the outlines overlap (lower is better). Group layouts use the settings of the Layout section.

Runtime table

Times the main steps on random networks of growing size (generated from fixed seeds; the table lists their edges), in this browser: reading the network file, building the network, the weighted layout, edge bundling, the profile statistics, Louvain and the group separation score. The view is not changed.

Network Comparison

Compare two to ten networks from your open views or from the network files: which nodes and edges they share, how similar they are, whether hubs stay hubs, and how their topology differs.

Networks to compare

NORMA API

Other applications can open NORMA with their own networks, groups and values, so that a pathway database, an analysis pipeline, a notebook or a web page can show its results in NORMA with one call. There are three ways in, all taking the same payload:

RESTPOST the payload to /api/external on a server running server.py; open the link it returns. Works from any language.
LinksA link to norma.html that points to the data (?data=, ?network=) or carries it (#json=). Needs no server.
postMessageA web page opens NORMA in a window or an iframe and sends it the payload directly. Needs no server.

This copy of NORMA answers at

Python template script

A ready-to-run client that checks a NORMA server, sends a network with groups, reads the stored payload back and builds a link that needs no server; it parses every answer and uses only Python's standard library. Adapt its build_payload() to your data.

python3 norma_api_client.py --server http://localhost:8000/ --open

The payload

A JSON object. Give the network in one of three forms, and add groups, values and settings as needed:

FieldTypeMeaning
nametextThe view's name (and the prefix of its files in Files).
edgeslistThe network as {"source", "target"} objects, each optionally with type (the channel), weight (a number) and directed (true/false).
nodeslistOptional, with edges: {"id", …} objects whose other fields become node attributes (shown in node details and searchable).
filesobjectThe network as NORMA files instead: network (text, or a list for several networks), annotation (text or list) and expression (text), in the tab-separated formats. A list item can be {"name", "text"}.
networkobjectOr a complete NORMA view (nodes, edges, groupOrder, …) as saved by Save view file; see JSON format.
groupsobject or list{"Group": ["node", …]}, or [{"name", "members", "color", "description"}]. Nodes may be in several groups.
annotationslistMore groupings, each {"name", "groups"}; the view's Grouping list switches between them.
expressionobject{"node": "#e11d48"} (colors), {"node": 1.7} (one numeric value) or {"node": {"t0": 0.2, "t1": 1.4}} (several columns, e.g. time points).
directedtrue/falseRead files.network as directed.
settingsobjectDisplay settings by their names in a settings file (for example edgeDirection, edgeCurveStyle, showGroupHulls, hullStyle, nodeFillSelect, legendShow), plus theme and layout (fr, kk, stress, cose, circle, …).
tabtext"3d" opens the 3D page instead of the 2D page.
format / viewsA whole session file ("format": "norma3-session") can be sent as the payload too.

With edges or files, NORMA adds the network, groupings and values to Files like uploaded files and opens them in a new view, so everything in NORMA works on them. Networks larger than 5,000 nodes are cut to their first 5,000. The example in Try it shows all common fields.

REST

When NORMA runs with server.py (see Running NORMA locally or on a server), the server offers:

Web services (all answer in JSON)
RequestAnswer
POST /api/external with the payload as JSON (Content-Type: application/json){"token", "url", "expiresInHours"}. Open url in a browser: NORMA starts with the payload loaded.
GET /api/session/TOKENThe stored payload (NORMA fetches it when opened with ?session=TOKEN); 404 once it has expired.
GET /api/health{"status": "ok", "api": "1.0"}, to check that a server offers the API.

The token is made by the server; you never build the link yourself. Payloads are kept in the server's memory for 24 hours (set NORMA_API_TTL_HOURS), up to 50 MB each; the API accepts calls from any web page (CORS).

curl

curl -X POST http://localhost:8000/api/external \
  -H "Content-Type: application/json" \
  -d '{"name": "My network",
       "edges": [{"source": "A", "target": "B"}, {"source": "B", "target": "C"}],
       "groups": {"Module 1": ["A", "B"], "Module 2": ["C"]}}'

# answer:
# {"token": "k3J9…", "url": "http://localhost:8000/norma.html?session=k3J9…",
#  "expiresInHours": 24}

Python

import requests, webbrowser

payload = {
    "name": "My network",
    "edges": [{"source": s, "target": t} for s, t in [("A", "B"), ("B", "C"), ("C", "A")]],
    "groups": {"Module 1": ["A", "B"], "Module 2": ["C"]},
    "expression": {"A": 1.5, "B": -0.4, "C": 2.1},
    "settings": {"layout": "fr", "showGroupHulls": True},
}
r = requests.post("http://localhost:8000/api/external", json=payload, timeout=30)
r.raise_for_status()
webbrowser.open(r.json()["url"])      # opens NORMA with the network

R

library(httr)
payload <- list(
  name   = "My network",
  edges  = data.frame(source = c("A", "B"), target = c("B", "C")),
  groups = list(`Module 1` = c("A", "B"), `Module 2` = list("C"))
)
r <- POST("http://localhost:8000/api/external", body = payload, encode = "json")
browseURL(content(r)$url)

JavaScript

const r = await fetch("http://localhost:8000/api/external", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ name: "My network", edges, groups }),
});
const { url } = await r.json();
window.open(url, "_blank");

Links need no server: any copy of norma.html, on a web server or opened from disk, reads them when it starts.

http://localhost:8000/norma.html?data=https://example.org/my-payload.json
http://localhost:8000/norma.html?network=https://example.org/net.txt&annotation=https://example.org/groups.txt&expression=https://example.org/values.txt&layout=fr
http://localhost:8000/norma.html#json=eyJuYW1lIjoiTXkgbmV0d29yayIsImVkZ2VzIjpb…
  • ?data=URL fetches a payload file. ?network=, ?annotation= and ?expression= fetch NORMA files; add &name=, &layout=, &theme= or &tab=3d if you like. The site holding the files must allow cross-site downloads (CORS), as GitHub raw files, Zenodo and most data portals do.
  • #json= carries the payload itself, as base64url-encoded JSON. It suits small networks (links longer than a few thousand characters may be cut by chat and mail programs); the part after # is never sent to any server. Make a link below builds one.

A button on your own site:

<a href="http://localhost:8000/norma.html?data=https://example.org/pathway-42.json"
   target="_blank">Open in NORMA</a>

postMessage

A web page can open NORMA and hand it data directly, with no server and no size limit other than the browser's. NORMA sends {"type": "norma:ready"} to the page that opened or embedded it when it has started (and answers {"type": "norma:ping"} the same way). Send {"type": "norma:load", "payload": …, "requestId": …}; NORMA answers {"type": "norma:loaded", "ok": true, "summary": …} or {"ok": false, "error": …} with the same requestId. Each load opens a new view, so a page can send several networks.

In a new window

// open NORMA (any copy: a file, a web server or server.py)
const norma = window.open("http://localhost:8000/norma.html", "_blank");

window.addEventListener("message", (e) => {
  if (e.source !== norma) return;
  if (e.data.type === "norma:ready") {           // NORMA has started
    norma.postMessage({
      type: "norma:load",
      requestId: 1,
      payload: { name: "My network", edges, groups, expression },
    }, "*");
  }
  if (e.data.type === "norma:loaded") {          // the answer
    console.log(e.data.ok ? e.data.summary : e.data.error);
  }
});

In an iframe

<iframe id="norma" src="norma.html" style="width:100%;height:700px;border:0"></iframe>
<script>
  const frame = document.getElementById("norma");
  window.addEventListener("message", (e) => {
    if (e.data.type === "norma:ready")
      frame.contentWindow.postMessage({ type: "norma:load", payload }, "*");
  });
</script>

Try it

Edit the payload and choose what to do with it.

Limits and privacy

  • Payloads up to 50 MB; networks up to 5,000 nodes are shown in full.
  • Data sent with postMessage or #json links stays in the browser. With REST, the payload is kept only in the memory of the server you sent it to, for the time set there, and anyone with the link can open it until then; don't use it for confidential data on a shared server.
  • NORMA only displays what it receives: payloads cannot run code, and NORMA sends nothing back except the norma:loaded summary to the page that asked.
How to cite NORMA

If NORMA helps your work, please cite:

  • Karatzas E, Koutrouli M, Baltoumas FA, Papanikolopoulou K, Bouyioukos C, Pavlopoulos GA. The network makeup artist (NORMA-2.0): distinguishing annotated groups in a network using innovative layout strategies. Bioinformatics Advances. 2022;2(1):vbac036. doi:10.1093/bioadv/vbac036
  • Koutrouli M, Karatzas E, Papanikolopoulou K, Pavlopoulos GA. NORMA: The Network Makeup Artist, a web tool for network annotation visualization. Genomics, Proteomics & Bioinformatics. 2022;20(3):578–586. doi:10.1016/j.gpb.2021.02.005

Please also cite the databases and methods you use; see Resources and methods.

This is NORMA's technical help: how to load data, use each control and page, save your work and run NORMA on a server. For an overview of NORMA, its data sources, what's new and how to cite it, see About.

Getting started

Getting started

NORMA 3.0 shows networks whose nodes belong to groups (annotations) and whose node pairs can be linked by several kinds of edge (channels); unlike earlier versions of NORMA, it handles these multi-edge networks. The application is a single file, norma.html, that opens in a browser. It starts on the Welcome tab, which shows what NORMA does and offers quick ways to open an example, fetch a network from a database or upload files; the tab stays there, so you can always go back to it. Opening a network moves to 2D Network. It reads the same tab-delimited files as NORMA, plus a richer JSON format.

The screen has eight pages. Welcome is the start page, 2D Network is the interactive view, 3D Network shows the same view in three dimensions, Network Profiler computes topology statistics and group analyses, Network Comparison sets up to ten networks side by side, API explains how other programs can open NORMA with their data, Help is this page, and About describes NORMA, its data sources and how to cite it. The NORMA logo at the top left always leads back to Welcome. The ? next to a sidebar heading opens the matching section here. Finding your way around explains the rest of the screen.

  1. Upload your files or open an example in the sidebar's Upload Data tab, or fetch a network from a database (STRING, Reactome, OmniPath, NDEx, IntAct or GO-CAM) in the Database importers tab.
  2. Tick networks and choose an annotation and an expression file, then choose Open in new view.
  3. Style that view in the Display tab: layout, groups, colors, sizes, labels and edges.
  4. Repeat with other combinations. Each becomes its own view; switch between them with the View list in the top bar.
  5. Save a picture with Export image (camera button, top bar), or the data in other formats with the Export tab.

Finding your way around

  • Top bar (purple): the View list, which picks the visualization you are working on, with Duplicate, Rename and Delete…, and the Grouping list (amber), which switches the current view to any annotation in Files while keeping node positions. For views opened from a built-in demo or a JSON file, the groups come with the data and the list only shows how many there are. On the right are Export image (the camera button), undo and redo and the theme.
  • Page tabs: Welcome (the start page, always available), 2D Network, 3D Network, Network Profiler, Network Comparison and Help. In the row below them, three colored labels say what the current view shows: the Network (blue), the Grouping with its number of groups (amber) and where node Colors come from (pink). Hover a label for its full text. At the right end of that row are the numbers of nodes, edges, channels and groups, with a directed or mixed direction tag when edges have a direction; when some groups are unticked, the group count reads, for example, 8/9. The labels and counts stay visible on every page, so the Network Profiler and Network Comparison pages always tell you which view "Current view" means.
  • Sidebar tabs: Upload Data (blue) holds examples, your files and opening saved work; Database importers (red) fetches networks and groupings from STRING, Reactome, OmniPath, NDEx, IntAct and the Gene Ontology; Export (purple) saves pictures, files for NORMA and other tools, Arena3D networks and sessions; Display (green) holds everything about how the current view looks. The Examples list only chooses what Open example opens next; it doesn't show what is on screen. The View list and the colored labels do.
  • Opening and closing sections: click a section's title (or focus it and press Enter or Space) to fold it away or open it again; the ? in a title opens its help instead. All sections start folded, so each tab shows a short list of titles; open the ones you need. Inside a section, small colored headings with a line (for example Direction and arrows or Session file (.json)) separate groups of related options.
  • Section order and colors: every sidebar section has a color of its own, and neighbouring sections always have clearly different ones. Upload Data: Examples (green), Files (blue) and Open saved work (purple). Database importers: STRING (red), Reactome (blue), OmniPath (teal), NDEx (orange), IntAct (green) and Gene Ontology (purple); click an importer's title to open or close it. Export: NORMA files (blue), Image (pink), Other tools (orange), Save your work (slate) and Arena3D (teal). The Display tab starts with the groups and how they are drawn and placed, then the look of nodes and edges, then extras: Node groups (amber), Group highlighting (magenta), Layout (green; 3D layout, teal, on the 3D page), Colors (pink), Nodes (sky blue), Labels (orange), Edges (slate), Edge channels (lime), Legend (crimson), Attributes (cyan) and Performance (brown). The labels below the page tabs use the matching colors: Network blue like Files, Grouping amber like Node groups, and Colors pink like Colors.

Views

A view is one visualization: a set of networks with an annotation and an expression file, or an example or JSON file, together with how it looks. Each view keeps its own display settings, node positions, zoom, ticked groups and channels, group colors and shapes, channel colors, edge style including bundling, and its 3D positions and camera, so you can prepare several pictures from the same uploads and move between them without losing work. The theme and the search options apply to every view.

  • Duplicate copies the current view, for example to compare two annotations or two layouts of the same network.
  • Rename names the current view; press Enter to keep the name or Escape to cancel.
  • Grouping (top bar) regroups the current view by another annotation, or by none, and keeps node positions; the same as ticking an annotation in Files and choosing Show in this view.

In the Upload Data tab, Show in this view replaces what the current view shows with the ticked files and keeps its display settings; if only the annotation or expression file changed, node positions are kept. Open in new view shows the ticked files in a new view and leaves the current one as it was. Open example always opens a new view, reusing an empty untitled one if there is one.

Undo and redo

The arrows in the top bar undo and redo changes to the current view: moved nodes, layouts, spread, display settings, ticked groups and channels, group and channel colors, and switching or clearing what the view shows. Keyboard: Ctrl+Z (⌘Z on a Mac) undoes, Ctrl+Shift+Z or Ctrl+Y redoes. A quick series of changes, such as dragging a slider or a layout's animation, counts as one step. Each view has its own history of up to 60 steps, kept while the page is open. Zooming, panning, searching, selecting and the theme are not part of the history.

Data

Examples

The first block of the list holds NORMA's example datasets. The TP53 documentation example also brings a small file of simulated log2 fold changes and adjusted p-values, for trying the numeric color scale; tick it under Expressions. Opening one adds its network, annotations and expression file to Files, selects them and shows the result in a new view. Their other annotations stay in the list so you can switch between them.

ExampleFilesSource
STRING: TP53 interactorsNetwork (weighted), groups, expressionSTRING
STRING: BCAR3 interactorsNetwork; GO biological process, GO molecular function, KEGGSTRING
Drosophila Tau networkNetwork; KEGG, Louvain communities; expressionPMID 31488613, doi:10.1523/JNEUROSCI.0391-19.2019
Human gene co-expressionNetwork; GO biological process, molecular function, cellular component; KEGG; MCODE cluster colorsPMID 19081792, doi:10.1371/journal.pone.0003911, bioinfow.dep.usal.es/coexpression
COVID-19Network; InterPro, SMART, GO (three), KEGGIntAct
Gallus gallusNetwork; KEGGBioGRID
Signalling cascade (showcase)Directed multi-edge network with five channels; four cascade levels; simulated log2FC and adjusted p-values. Opens with arrows, curved parallel edges, the numeric color scale and the legend.Simulated for NORMA 3.0
Healthy vs disease (showcase)Two networks over the same 64 nodes (the disease network loses about a fifth of the edges and gains links in one module); four modules; simulated log2FC. Opens with both networks overlaid as two channels; compare them on the Network Comparison page.Simulated for NORMA 3.0
Arena3D example (showcase)The seven-layer example network from Arena3D's documentation; its layers become groups. Try Open in Arena3D to send it back.Arena3D
TP53, NORMA documentationThe small example from NORMA's help pagesNORMA

The second block holds built-in demos in JSON form: a curated multi-edge operon, two synthetic networks of four overlapping modules with attributes on nodes, edges and groups, and random networks from 20 to 5,000 nodes. The 40-node random directed multi-edge network opens with arrows, curved parallel edges and a hierarchical layout: its four groups form a signalling cascade from receptors to target genes, pairs carry one to three channels, and about a quarter of them also have a feedback edge in the opposite direction. The 20-node random network opens with edge labels: each edge carries an interaction attribute (activates, inhibits, binds, …) shown at its middle. All demos are generated from fixed seeds and can be downloaded under Example files. Clear view empties the current view but keeps your files.

Sample data and sample output

Every example opens with one click, from Open an example on the Welcome page or the Examples list in the Upload Data tab. Its files (the sample data) can be downloaded under Example files, to see the formats or to try uploading them. The links below open a sample result directly; they behave exactly like results from your own data:

Sample outputShows
Drosophila Tau networkA published network with KEGG pathways, Louvain communities and expression colors; try the Network Profiler and Group analysis on it.
STRING: TP53 interactorsA STRING network with evidence channels, groups and expression.
Signalling cascadeDirected, multi-channel edges with numeric values, a color scale and a legend.
Healthy vs diseaseTwo networks to compare on the Network Comparison page.
Arena3D exampleSeven layers, ready to open in Arena3D.
Four overlapping modules in 3DPie-chart nodes and group layouts on the 3D page.

Each link can also be bookmarked or shared: norma.html?example=NAME (add &tab=3d for the 3D page).

Example files

Sample data: every file behind the examples, so you can see the file formats and try NORMA's upload with them. Click a name to download the file; the same examples can be opened directly from the Examples list or with the sample-output links in Sample data and sample output.

Built-in demos

The demos are generated from fixed random seeds, so each download matches what Open example shows. Network and Groups are NORMA files: the network has a Weight column when any edge is weighted (edges without one are written with weight 1) and a Type column when there are several channels. JSON keeps everything, including attributes, group descriptions and, for the labelled demo, the settings that turn edge labels on.

Files and formats

Upload one or many files at once with Upload files…, or drop them on the upload box. Detect file type recognizes networks by their header and expression files by their colors; anything else is read as an annotation. Pick a type yourself if detection guesses wrong. Networks with more than 5,000 nodes are cut to their first 5,000 nodes, with a note in the list. Arena3D network files (columns SourceNode, SourceLayer, TargetNode, TargetLayer, Weight, Channel) are recognized too: each becomes a network and an annotation with one group per layer. The list below it chooses whether network rows without a Direction value are read as undirected or directed. The name box names a single upload; with several files, each keeps its file name. Every file appears in one of three lists (Networks, Annotations, Expressions), in A–Z order, and stays there until you delete it (see Deleting files). Files live only in this browser tab.

Deleting files

There are four ways to remove things completely:

  • Delete… in the top bar (next to Rename) lists the current view and every file it shows (its network files, grouping and expression file), each with a tick box; untick what you want to keep. Removing the view closes it (the previous view is shown; removing the only view leaves an empty one). For a view opened from an example or a JSON file, only the view itself can be removed, since its data belongs to the view.
  • The next to the Grouping menu removes the grouping file the view uses.
  • The next to a network, annotation (grouping) or expression file in Upload Data → Files removes that file.
  • Delete all files… under the Files lists removes every file at once.

Each asks Are you sure you want to completely remove …? and names the views that will change; nothing happens until you choose Yes, remove. Deleting a file:

  • removes the file from Files, from the Grouping menu and from every other file list and menu, together with everything NORMA read from it (for STRING and database imports, also the extra node details that came with the network);
  • updates every view that shows it, including views you are not looking at: a view keeps its remaining networks, node positions, group colors and ticked groups and channels, and loses the deleted network's nodes and edges, or the deleted groups or colors; a view left with no network becomes empty (its display settings stay);
  • clears the undo history of those views, so the deleted data can't come back, and removes Network Profiler and Network Comparison results that were computed from it;
  • leaves out the deleted data from sessions saved afterwards;
  • renames views that were named after their files automatically (views you renamed keep their names).

Groupings that were fetched for a deleted network (for example from STRING) are not deleted with it; delete them separately if you don't need them. Deleting never touches the files on your disk, and cannot be undone inside NORMA: to use a file again, upload it again. Views opened from examples or JSON files hold their own data; empty them with Clear view.

Network file

Tab-separated, with a header row Source, Target and optionally Weight. Connections are undirected: A–B and B–A are the same connection, so repeats and self-loops are removed and reported.

Source	Target	Weight
CDKN1A	TP53	5
TP53	MDM2	1

An optional Type column (also accepted as Channel, Layer or Interaction) keeps several edges between the same pair, one per type, and makes each type a channel. Only a repeat of the same pair and type is removed. This column is new in NORMA 3.0: earlier versions of NORMA read only Source, Target and Weight and kept a single connection per pair.

Source	Target	Weight	Type
TP53	MDM2	0.9	experiments
TP53	MDM2	0.7	textmining

An optional Direction column (also accepted as Directed, Dir or Arrow) marks each row as directed (also yes, true, 1 or ->) or undirected (also no, false, 0 or -). A directed row points from Source to Target, so A→B and B→A are two connections; for undirected rows they are one. Rows with an empty or unknown value follow the direction chosen when uploading. This column is new in NORMA 3.0; see Directed and undirected networks.

Source	Target	Type	Direction
EGFR	GRB2	binding	undirected
MAPK1	ELK1	phosphorylation	directed
ELK1	FOS	expression	directed

Annotation file

No header. Each line is a group name, a tab, then the group's nodes separated by commas without spaces. Group names may contain spaces and commas; node names may not contain commas. A node can be in any number of groups.

Group-2	BCL2L1,MDM4,MDM2,CHEK2
Group-5	TP53,EP300

Expression file

No header. Each line is a node name, a tab, then a color: a name such as red or a hex code such as #ff0000. Nodes without a color are gray.

CDKN1A	blue
MDM4	#00ff00

Numeric values can be used instead of colors (new in NORMA 3.0): each line is a node name, a tab, then one or more numbers, such as a log2 fold change and an adjusted p-value. An optional first line names the columns; without it they are called value, value 2 and so on. NA, empty cells and similar entries count as missing. Decimal commas are accepted. Detect file type recognizes such files, and the list shows how many value columns they have.

Gene	log2FC	padj
CDKN1A	2.4	0.000001
BCL2L1	-1.8	0.0003
TP53	NA	NA

Choosing what to show

Tick one or more networks, choose one annotation and one expression file (or None), then choose Show in this view or Open in new view. A note under the buttons tells you when the selection differs from what the view shows. If only the annotation or expression changed, Show in this view updates in place and keeps node positions, so you can flip between GO, KEGG and community groupings of the same layout, or open each grouping in its own view to keep them side by side.

With an expression file selected, nodes are filled with its colors and groups are shaded behind them, as in NORMA. Without one, nodes are filled with their groups' colors, split into a pie for nodes in several groups.

Annotation names not in the network

Node names in an annotation must also appear in the network. The check happens twice:

  • When you upload an annotation, its names are compared with the networks uploaded together with it, or, if there are none, with the ticked networks, or else with every network in the list. Names found in none of them are discarded right away, groups left empty are removed, and a warning lists what was dropped. Download corrected annotation saves the cleaned file, which is what NORMA's companion R script produces. If no name matches at all, the file is not kept. If no network has been uploaded yet, the check waits until the annotation is shown.
  • When you show files, annotation and expression entries for nodes that aren't in the selected networks are left out and listed in the status notes, again with a corrected annotation to download.

Several networks and multi-edges

New in NORMA 3.0. Previous versions of NORMA did not support multi-edge graphs: every pair of nodes could have only one connection, and repeated connections were removed when a network was loaded. NORMA 3.0 keeps all of them, as parallel edges in separate channels.

Parallel edges come from three sources: a Type column in a network file, several network files shown together, or JSON files with more than one edge per pair.

Ticking more than one network overlays them. Nodes with the same name are merged, and each network becomes its own edge channel, so a connection found in two networks is drawn as two parallel edges in two colors. Edges and nodes then carry a network / networks attribute naming their source, which you can search for.

Ways to work with parallel edges:

  • Edge channels turns each channel on or off and recolors it.
  • Edges → Parallel edges: merge per node pair draws one edge per pair, thicker the more channels it carries. It's gray when channels disagree and in the channel's color when there's only one. Clicking a merged edge lists all its channels.
  • Edges → Shape: curved fans parallel edges apart so each stays visible.
  • Layout → Use checked channels only positions nodes using only the channels you've ticked, so you can lay the graph out by one network and compare the others on top.
  • Edges → Shape: bundled draws edges running in similar directions together, and Labels → Edge labels can name each edge's channel.
  • Network Profiler reports, for the current view, how many node pairs are shared between channels and how similar each pair of channels is; Network Comparison sets whole networks side by side.
  • Export → NORMA files → Keep channels as a Type column saves parallel edges in a NORMA network file instead of merging them.

Directed and undirected networks

New in NORMA 3.0. Earlier versions of NORMA treated every connection as undirected. Edges can now point from a source to a target, and a network can mix directed and undirected edges.

Bringing direction in

  • When uploading, the list under the file type sets how network rows are read: undirected (A–B), the default, or directed (Source → Target). Choose directed before uploading if A→B and B→A are different interactions: an undirected upload treats them as the same connection and keeps only one.
  • A Direction column in the network file overrides that choice row by row (see Network file), so one file can mix both kinds.
  • In JSON, "directed": true at the top makes every edge directed, and "directed": true or false on an edge sets that edge (see JSON format).
  • The built-in Random directed multi-edge network shows a signalling cascade with up to three channels per pair and some feedback edges.

Handling a network as directed or undirected

Display → Edges → Direction decides, for the current view:

  • Treat all edges as undirected (default): direction is ignored everywhere, as in earlier versions of NORMA. When the data does mark edges as directed, the top bar shows a direction ignored tag; click it to switch to As in the data.
  • As in the data: edges marked as directed get arrows and are treated as directed; the rest are undirected.
  • Treat all edges as directed: every edge points from its source to its target, whatever the file says.

With arrows shown, Arrow chooses a triangle, vee, curved triangle or chevron, and Arrow size scales them. The top bar shows a directed or mixed direction tag next to the counts.

What direction changes

  • Parallel edges: A→B and B→A are separate edges. With Shape: curved they are drawn apart; merge per node pair merges only edges running the same way.
  • Node size and details: In-degree and Out-degree count incoming and outgoing edges (an undirected edge counts as both). Betweenness and closeness follow edge directions when the shown part has directed edges; clustering ignores direction. A node's details show in- and out-degree and mark each neighbor with → (outgoing) or ← (incoming); an edge's details show its direction.
  • Layout: Hierarchical places sources above their targets. Force-directed layouts and the group strategies ignore direction.
  • Network Profiler and Network Comparison: with Use edge direction ticked, they add directed statistics and match edges by direction (see below).
  • Exports: NORMA network files get a Direction column when any edge is directed, and JSON keeps each edge's direction. Earlier versions of NORMA read neither.

Search, group shading, shapes, bundling and edge labels work the same for directed and undirected edges.

Database importers

The Database importers tab fetches networks and groupings from public databases; no account is needed. Every import is added to Files (a network plus one annotation per grouping) and opens in a new view, where the Grouping list switches between its groupings. Nodes keep useful identifiers as attributes, in particular uniprot, which the Gene Ontology importer uses. Networks with directed edges open with arrows. Very large results are cut to 5,000 nodes, and every importer has a Cancel button. When NORMA runs with server.py, all requests go through the server (see Running NORMA locally or on a server); otherwise the browser calls the services directly, which some browsers block. STRING is described in Importing from STRING.

Reactome

Curated pathways from Reactome. Type a pathway name (choose the species) or a stable identifier such as R-HSA-69278, choose Search pathways, pick one, and choose Fetch pathway network. NORMA reads the pathway's reactions (up to Most reactions) and their participating molecules: nodes are the proteins (and, if ticked, small molecules), and two nodes are linked when they take part in the same reaction, weighted by how many reactions they share. Reactions with more than the chosen number of molecules are left out, since they would link everything to everything. Groupings: the pathway's sub-pathways (the proteins of the reactions each contains) and, optionally, the 40 largest reactions.

OmniPath

Signalling, transcriptional and ligand–receptor interactions from OmniPath for human, mouse or rat. Type gene symbols or UniProt accessions and tick the datasets (OmniPath core, pathway, kinase–substrate and ligand–receptor extras, CollecTRI and DoRothEA). NORMA fetches their interactions with all partners (keeping the Most partners best supported by curation effort) or only those among the given proteins. Edges keep OmniPath's direction; Channels split them by effect (stimulation, inhibition, both, unsigned) or by interaction type, and their weight is the curation effort. Groupings: protein complexes with at least two members in the network, intercellular roles (ligand, receptor, …) and, optionally, an annotation resource such as SignaLink pathways or NetPath.

NDEx

Public networks from the Network Data Exchange. Search with words or paste a network UUID, pick a network (the list shows its size and owner) and choose Fetch network. Node names, edge interactions and numeric weights are read from the network, its saved layout is kept, and node attributes become node attributes in NORMA. Groups depend on the network ("limited"): every node attribute with 2 to 60 distinct values covering at least 30% of the nodes (such as a type or module) becomes a grouping, up to six.

IntAct

Experimentally detected molecular interactions from IntAct, through its PSICQUIC service. Type gene names or UniProt accessions and choose the organism (both partners must belong to it). Interaction records below the Lowest MI-score are left out; the others are merged per pair and interaction type (physical association, direct interaction, …), which become channels, with the best MI-score as the weight. Most partners keeps the highest-scoring partners, and Most records limits how much is read. IntAct has no groupings of its own, so NORMA adds one that separates the query proteins from their partners; add GO terms or communities for more.

Gene Ontology

  • GO-CAM network (limited): GO-CAM models from the Gene Ontology link the activities of gene products causally. Choose the organism, List models, filter and pick one (or type a model ID), and Fetch GO-CAM network. Nodes are the gene products that enable the activities; directed edges follow the causal relations (directly positively regulates, provides input for, …), which become channels. Groupings: the biological process, cellular component and molecular function of each activity.
  • GO groupings add GO terms as groups to the network already shown, from QuickGO annotations of the nodes' UniProt accessions (the node name or its uniprot attribute). Tick the aspects; Leave out electronic annotations skips IEA evidence, NOT annotations are always skipped, and each aspect keeps up to Groups per aspect terms with at least Smallest group members (terms that contain every node are left out). The groupings are added to Files and shown in the current view.

Importing from STRING

New in NORMA 3.0. STRING, in the Database importers tab, fetches a protein interaction network, and functional groupings for it, directly from the STRING database. It needs an internet connection.

The network

  • Proteins or genes: one or more names, such as TP53, p53 or a UniProt accession, separated by spaces, commas or new lines. STRING matches each name to its best protein and the status notes say how each was matched and which names weren't found.
  • Organism: pick one from the list, or choose Other organism and type its NCBI taxon ID (for example 7955 for zebrafish). Any organism in STRING can be used.
  • Network: functional associations use all of STRING's evidence; physical interactions only keeps proteins that bind each other or form a complex.
  • Interactors to add (0–500) extends the network with the proteins most confidently connected to yours, best first. With 0 and several names, only the connections among them are fetched; with a single name STRING always adds its 10 best interactors.
  • Minimum confidence: highest (0.900), high (0.700), medium (0.400), low (0.150) or a custom value; weaker connections are left out.
  • Evidence channels: gene neighborhood, gene fusion, co-occurrence, co-expression, experiments, curated databases and text mining. Untick channels to leave that evidence out: each connection's confidence is then recomputed from the ticked channels only, the way STRING combines them, and connections that fall below the minimum are dropped (the notes say how many).
  • Edges: one edge per channel makes a multi-edge network in which each channel has STRING's color and its own score as the weight, so you can tick channels on and off, merge or bundle them later. One edge per pair keeps a single edge with the combined score.

Each protein carries its STRING identifier, STRING's description of it, and whether it was one of your query proteins, as attributes: they appear in the node's details and can be searched.

Groupings from functional terms

  • Terms: enriched in the network (recommended) runs STRING's enrichment analysis on the network's proteins and keeps terms with an FDR at or below the chosen value; all annotations of its proteins takes every term any of them has. STRING doesn't share full KEGG annotations for licensing reasons, so KEGG pathways come only with enriched terms.
  • Term collections: GO biological process, molecular function and cellular component, KEGG, Reactome and WikiPathways pathways, UniProt keywords, Pfam, InterPro and SMART domains, diseases, tissues, subcellular localization, phenotype ontologies (human, mammalian, fly, worm, zebrafish, fission yeast), STRING's local network clusters and reference publications. Which ones have terms depends on the organism and the STRING version; the notes list what STRING returned. Any other collection STRING offers includes collections not in the list.
  • Groups per collection keeps the most significant (enrichment) or largest (all annotations) terms, and Smallest group leaves out terms with fewer proteins in the network.

Each collection becomes an annotation in Files, named after the network and the collection, and the view opens grouped by the first available of KEGG, Reactome, GO biological process and so on. Switch collections with the Grouping list in the top bar; node positions stay. Every group carries the term's identifier and collection and, for enrichment, its FDR, p-value and number of proteins in the genome, shown in the group's details (its i button). Fetch groupings for the current view adds more collections, or the same ones with other settings, to a STRING network that is already shown.

STRING server

By default NORMA asks https://string-db.org, which always answers with the latest STRING version; the notes say which version was used. To get the same answers every time, enter a version address such as https://version-12-0.string-db.org. NORMA identifies itself to STRING and waits a second between requests, as STRING asks, so a full import takes a few seconds. Cancel stops a request that takes too long. Untick Fetch protein descriptions to save one request.

Networks and groupings fetched from STRING can be saved as NORMA files or JSON like any other; please cite STRING (Szklarczyk et al., Nucleic Acids Research 2023;51(D1):D638–D646, doi:10.1093/nar/gkac1000) when you use them.

JSON format

The only required fields are nodes and edges:

{
  "nodes": [
    { "id": "A", "groups": ["g1", "g2"], "size": 40, "color": "#e07a7a", "tissue": "liver" },
    { "id": "B", "group": "g1" }
  ],
  "edges": [
    { "source": "A", "target": "B", "type": "experiments", "weight": 0.8, "pmid": 123 },
    { "source": "B", "target": "A", "type": "regulation", "directed": true }
  ],
  "directed": false,
  "groupAttrs": { "g1": { "label": "Group one", "description": "…", "curated": true } },
  "nodeColors": { "g1": "#e8a15f" },
  "edgeColors": { "experiments": "#b464c9" },
  "groupShapes": { "g1": "diamond" },
  "config": { "showEdgeLabels": true, "edgeLabelContent": "attr:pmid" }
}
  • Nodes: id, group or groups, size and color have fixed meanings; any other field is kept as an attribute.
  • Edges: id, source, target, type (the channel) and weight have fixed meanings; any other field is kept as an attribute. Any number of edges may join the same pair, for example one per channel. directed (true or false) sets an edge's direction.
  • Direction: a top-level "directed": true makes every edge without its own directed field directed.
  • Numeric values: "values": { "log2FC": 1.2, "padj": 0.003 } on a node gives it numeric values for the color scale and node size.
  • Groups: in groupAttrs, label, description and color have fixed meanings; anything else is a group attribute. Attributes can also be nested under an attrs object.
  • Colors: nodeColors and edgeColors fix group and channel colors.
  • Shapes: groupShapes gives a group a node shape. Names are Cytoscape's: rectangle, round-rectangle, diamond, triangle, vee, pentagon, hexagon, octagon, star, rhomboid, tag, concave-hexagon, barrel; groups not listed are circles.
  • Group order: an optional groupOrder list sets the order of groups in the legend and the order palette colors are handed out.
  • Settings: an optional config object holds display settings in the same shape as a settings file. For example, "edgeLabelContent": "attr:pmid" labels edges with their pmid attribute.
Viewing and styling

Exploring the network

  • Selecting several nodes: Shift-click (or Ctrl/⌘-click) adds or removes a node, Shift-drag on the background draws a selection box, Ctrl+A selects every visible node and Escape clears the selection. Selected nodes get a thick yellow border and halo, which disappears as soon as they are deselected; a bar at the top right shows how many are selected with Zoom to selection and Clear, and dragging any selected node moves them all.
  • Drag nodes to move them, scroll to zoom, and drag the background to pan. Zoom has no practical limit in either direction, and the view always keeps the network in frame: a network smaller than the canvas can't be pushed off it, and a larger one can't be panned past its edges. The +, and Fit buttons at the bottom left zoom around the center; the number under them is the zoom level. Double-click the background to fit everything, or a node to center it.
  • Click a node for its groups, degree (with in- and out-degree for directed edges), betweenness, closeness, clustering coefficient (computed on the ticked groups and channels), attributes and neighbors; with directed edges, → and ← mark outgoing and incoming connections. Group names in that panel open the group's details.
  • Neighbourhoods and paths (new in NORMA 3.0): the node details offer Open neighbourhood as a view with 1, 2 or 3 steps. With nodes selected, Neighbourhood in the selection bar opens them with their direct neighbours; with exactly two selected, Shortest paths opens every shortest path from the node selected first to the second, keeping only the edges on those paths, and says how many paths there are. Both follow edge directions where edges are directed, use only the ticked groups and channels, and open as new views that keep the nodes' positions, groups, colors and settings; the starting nodes are selected and carry a role attribute (center, source or target).
  • Click an edge for its channel, endpoints, direction, weight and attributes.
  • Click the i next to a group for its description, attributes, member and edge counts, density, and the groups it shares members with.
  • Click empty space to clear the highlight.
  • Find nodes, at the top left of the network (the button at its right minimizes the panel to a small Find nodes button, which still shows the number of matches; click it to open the panel again), highlights matching nodes and shows how many matched. Choose how to match: Contains, Exact name, Starts with, Ends with (suffix) or Regular expression. A regular expression can be typed as is, such as ^Rp[LS]\d+$, or between slashes with flags, such as /kinase$/i. Matching ignores case unless Match case is ticked, and also checks attribute values while Search attributes is ticked. Press Enter to zoom to the matches and Escape to clear.
  • The numbers at the top right count nodes, edges, edge channels and groups in the view; with groups unticked, the group count shows ticked/all, for example 8/9.

3D Network

New in NORMA 3.0. The 3D Network page shows the current view in three dimensions. It is the same view as 2D Network: groups, colors, pie slices, node shapes, borders, labels, edge labels, arrows, curved parallel edges, group shading, ticked groups and channels, search results and selected nodes all carry over, and every setting in the Display tab except the 2D Layout section changes both pictures. Node positions and the camera are separate for 3D, and each view keeps its own.

Moving around

  • Drag the background to rotate, right-drag (or Alt-drag) to pan, and scroll to zoom. Turning and tilting have no limit: drag on, or keep pressing a turn or tilt button, and the network rolls over as often as you like, so it can be seen from any side, including upside down.
  • Drag a node to move it within the screen plane; with several nodes selected, dragging one moves them all.
  • Click a node or an edge for its details, exactly as in 2D; click the background to clear. Shift-click selects nodes and Shift-drag draws a selection box. Double-click a node to turn around it, or the background to fit everything.
  • The buttons at the bottom left zoom (+, , Fit), turn (, ), tilt (, ), reset the view () and switch automatic rotation on and off (Auto). With the 3D picture focused, the arrow keys turn and tilt, + and zoom, and F fits.
  • Find nodes, Zoom to selection and Export image work here too and act on the 3D picture.

3D layout

On this page the Display tab shows a 3D layout section in place of the 2D one. As in 2D, layouts arrange only the nodes of ticked groups and, with Use checked channels only, only the ticked channels count.

  • Force-directed 3D, weighted: the Fruchterman–Reingold idea in three dimensions; heavier edges pull harder. Each connected piece is laid out on its own and smaller pieces are placed around the largest. It runs in the background and is used the first time a view is shown in 3D.
  • Sphere, Cube grid and Random place nodes on a sphere, in a cube or at random, best-connected nodes first.
  • Groups as 3D clusters: each ticked group becomes a ball of its nodes, with hubs in the middle. Groups that share many edges are placed close together, and the balls never overlap. Nodes in several groups sit between their groups.
  • Groups on stacked layers: the 2D layout lies flat and each group gets its own layer, one above the other, so the links between groups run between the layers.
  • Same as 2D (flat), Height by hierarchy level and Height by degree keep the 2D layout and add height: none, the level from the top of a hierarchy (following edge directions when edges are directed), or the number of connections, so hubs rise above the rest. Height step sets the distance between levels.

Spread pushes nodes apart or pulls them together, as in 2D. Double-click the slider to go back to 1×.

Look

  • View from turns the camera to the front, top, side or a tilted angle and fits the network.
  • Perspective: normal, strong (wide angle, more depth) or none (parallel projection, where sizes don't change with distance).
  • Nodes: shaded spheres or flat, as in 2D. Group shapes and pies are always drawn flat, facing you.
  • Depth fading blends distant nodes and edges into the background, which helps tell near from far.
  • Floor grid and axes draws a grid under the network and short x, y and z axes at its center.
  • Rotate automatically turns the network slowly; Rotation speed sets how fast.

Group shading follows the nodes as seen from the camera. Edge bundling applies to the 2D picture only; in 3D, edges are straight, and parallel edges curve apart when Shape is curved or bundled. On large networks the picture is simplified while you move it (no labels, pies or arrows) and drawn in full as soon as you stop; at most 500 node labels and 300 edge labels are drawn at a time, the nearest first.

Layout

This section is about the 2D Network page; the 3D page has its own layouts (see 3D Network). Every layout arranges only the shown part of the view: nodes in ticked groups, connected by edges of ticked channels while Use checked channels only is on. Nodes of unticked groups stay where they are, so ticking them again brings them back in place.

The switch at the top of Layout chooses how nodes are arranged. Only one side is active at a time; the other is shown greyed out and marked frozen, and Run layout runs only the active side. The choice is saved with the view.

By connections

Positions come from the edges alone; groups play no part. Force-directed (cose) places connected nodes near each other. Force-directed, weighted is the Fruchterman–Reingold layout NORMA uses: heavier edges pull their nodes closer, and the result is the same every time for the same input. Kamada–Kawai (new in NORMA 3.0) treats every pair of nodes as a spring whose length is the number of steps between them and relaxes the springs one node at a time; stress majorization starts from a pivot-MDS layout and then minimises the same kind of stress (the mismatch between on-screen and network distances) for all nodes together, which is usually faster and keeps distances most faithfully. Both ignore edge weights, lay out each connected part separately, and handle parts of up to 2,500 nodes. They are also available as group strategies and inside groups. Concentric puts high-degree nodes in the middle; hierarchical arranges nodes in levels from a root, following edge directions when the view has directed edges. Networks above 700 nodes load with a grid layout, since a force-directed layout can freeze the page for a while at that size; you can still run it yourself.

By groups

Group arrangement decides where each group goes, and Layout inside each group arranges the group's own nodes (circle, force-directed, concentric, hierarchical, grid or random). A node in several groups sits at the average of its positions, between those groups. Only groups ticked under Node groups count.

  • Groups as separate blocks treats each group, plus one block for nodes in no group, as a disc sized to fit its nodes, and places the discs so they never overlap. Force-directed puts groups that share many edges next to each other and packs the rest around them; Circle lines them up on a ring; Grid packs them in rows; Hierarchical stacks them in levels starting from the best-connected group; Concentric puts the largest group in the middle with the others in rings by size. Space between groups sets the gap.
  • NORMA-2.0 strategies (Karatzas et al., 2022, Bioinformatics Advances 2:vbac036, Figure 1) use the same weights and steps as NORMA's own code, with the algorithm you pick under Algorithm the strategy runs. A small diagram shows how the selected strategy works; links a strategy adds exist only while positions are computed. Weights change the result only with the two force-directed algorithms.
    • Strategy 1, virtual node per group: each group gets a hidden hub linked to all its members with weight 50. Real edges get weight 5, and every pair of members gets a light link (0.1). The algorithm runs on this larger network and the hubs are then removed.
    • Strategy 2, group gravity: every pair of nodes in a group gets a link at the network's highest weight. Real edges inside a group are multiplied by Force strength, and edges between groups, or to ungrouped nodes, are divided by it.
    • Strategy 3, super nodes per group: each group becomes a single node and ungrouped nodes stay as they are. The algorithm lays out this collapsed network and Force strength pushes the result outward.
    Strategies 1 and 2 place every node themselves. With them, Layout inside each group can also be Keep the strategy's arrangement; any other choice rearranges each group around where the strategy put it and keeps groups from overlapping.

Group size scales each group's local layout. Force strength runs from 1 to 20 (NORMA's default is 10). Use checked channels only applies to both sides. A group with more than 400 nodes gets 60 random partner links per node instead of links to every other member, to keep the layout fast. While By groups is active, it is also used when a network loads and when you switch annotations.

Fit to screen zooms to show the whole network. Spread pushes nodes apart (right) or pulls them together (left) around the middle of the network, from a quarter to four times the current distances, without changing the arrangement. Double-click the slider to go back to 1×. Running a layout resets it.

Node groups

Groups are listed A–Z (numbers in numeric order, so Group-2 comes before Group-10). The Order menu under the filter also sorts them by their number of nodes (the count shown on each row), Most nodes first or Fewest nodes first (groups of equal size stay A–Z), or keeps the File order of the annotation file. Nodes in no group always come last. The legend follows the same order, each view remembers the choice, and group colors don't change. Node names in the details panels, and the files in Files and in every file menu (Grouping, Network Profiler, Network Comparison, enrichment) are always listed A–Z.

Lists the groups of the current annotation with their node counts. Untick a group to hide nodes that are only in inactive groups; a node stays visible while any of its groups is active, and its pie shows only its active groups. Click a swatch to recolor a group. Nodes that no group lists appear under Not in any group.

Type in the filter box to narrow long lists such as GO terms. While a filter is set, the two buttons activate or deactivate only the matching groups, which makes it quick to show, for example, only terms containing "signaling". Pies show up to 16 slices; a node in more active groups gets a gray slice for the rest.

Node shapes

The small shape button on each group row opens a choice of shapes: circle, square, rounded square, diamond, triangle, vee, pentagon, hexagon, octagon, star, rhomboid, tag, concave hexagon and barrel. Use the arrow keys to move through them and Escape to close. The same shapes are offered in a group's details panel (its i button). Assign shapes gives each listed group a different shape at once, and Reset shapes makes them circular again; with a filter set, both apply only to the matching groups.

A node takes its group's shape only when exactly one of its groups is ticked. Nodes shown with two or more active groups stay circular, so their pie slices stay readable. Unticking groups therefore changes shapes: a node in a square group and a diamond group is a two-color circle, becomes a square when the diamond group is unticked, and a diamond when the square one is. Shapes combine with either fill: with expression colors, the shape shows the group and the color shows expression. Each view keeps its own shapes, and they are saved in JSON.

Group highlighting

Shades the area behind each active group in its color, as NORMA does. Opacity controls how strong the shading is. Three styles are available:

  • Convex hull draws a sharp outline around all of the group's nodes. Groups of one or two nodes get a circle or capsule.
  • Bubble sets draws contours that hug the group, in the style of Collins, Penn and Carpendale's Bubble Sets (IEEE TVCG 2009): the outline follows the group's nodes closely, links them with narrow bands so each group stays in one piece where possible, and bends around nodes that are not in the group, leaving holes where outsiders sit inside. Interleaved groups therefore stay readable where convex hulls would cover each other. Contours are recomputed when nodes move, groups are ticked or the zoom changes a lot; on networks with more than 1,500 shown nodes they are updated once the movement stops.
  • Fog cloud draws a soft, blurred area.

All three styles appear in image exports (SVG included) and on the 3D Network page, where bubble sets are drawn from the camera's point of view and simplified while the picture moves.

Colors

  • Node fill chooses between group colors, expression colors (from an expression file or each node's color field) and numeric values on a color scale, when the view has numeric values.
  • Numeric values (shown when the view has them):
    • Column picks which value to show, for example log2FC or padj.
    • Transform: use the values as they are, their −log10 (so small p-values become large), or their absolute values.
    • Scale: diverging scales (blue–white–red, purple–white–orange, purple–white–green, brown–white–teal) show values below and above a Center (0 by default), which suits fold changes; sequential scales (viridis, magma, blues, reds) run from low to high, which suits p-values and intensities. Most of these scales stay readable under common forms of color vision deficiency.
    • Range: symmetric around the center (diverging scales), from the lowest to the highest shown value, or custom; values beyond the range get the end colors.
    • No value sets the color of nodes without a value. A line under the controls says how many shown nodes have a value and their range.
    Steps (time points or conditions) appear when there are several value columns: and move one step, Play steps through them repeatedly at the chosen speed, and the slider jumps to any step, while node positions stay put. The current step shows at the top of the network. Same color scale for all steps (on by default) fixes the scale over all columns so colors can be compared between steps. Add the numeric files in Files as steps adds every column of the other numeric files as further steps, named file: column; nodes a file doesn't list get no value for its steps. A numeric file selected in Files switches the fill to numeric values automatically.
  • Group palette recolors all groups. The Okabe–Ito, IBM and Viridis palettes stay distinguishable under common forms of color vision deficiency. Past a palette's own colors, further colors are spread evenly around the color wheel, which keeps around 100 groups distinguishable.
  • Channel palette does the same for edge channels. Classic uses STRING's evidence colors.

Themes (top bar) change the interface and canvas background, not the data colors.

Node size

Nodes can keep the size given in the data or be sized by degree, in-degree, out-degree, betweenness, closeness, clustering coefficient or a numeric value (the column and transform chosen under Colors; on a diverging scale the distance from the center, so strongly raised and strongly lowered nodes are both large). With directed edges, betweenness and closeness follow edge directions. Sizes run from Min px for the lowest value to Max px for the highest. Metrics are computed on the nodes of ticked groups; Use checked channels only (on by default) also limits them to the ticked channels. Sizes update as you tick and untick. Node scale multiplies every size, from a tenth to five times.

Labels

  • Node labels show node names, centered on the node by default; the position list moves them above, below or to a side. Node label size sets their size, and Grow labels with node size scales each label with its node, so bigger nodes get bigger names.
  • Edge labels are drawn at the middle of each edge, whether straight, curved or bundled. They can show the channel, the weight, both, or any edge attribute in the network. Merged edges show how many channels they combine and their highest weight. Orientation runs them along the edge or keeps them horizontal, and Edge label size sets their size. With edge labels on, straight edges are drawn with a slightly slower method that supports labels.
  • Label colors: node and edge labels can follow the theme, use black, dark gray, white, blue, red or green, match their node's color or their edge's channel color, or use any color chosen with Custom…. White labels get a dark outline so they stay readable on a light background.
  • Hide labels when zoomed out drops labels that would appear smaller than the chosen size on screen, which keeps large networks readable and fast.

Edges

  • Direction: handle edges as in the data, all as directed, or all as undirected; with arrows shown, choose their shape and size (see Directed and undirected networks).
  • Parallel edges: draw every channel separately, or merge each node pair into one edge (see multi-edges); directed edges merge only with edges running the same way.
  • Shape: straight lines are fastest. Curved edges fan parallel edges apart, and Fan-out sets how far.
  • Bundled draws edges that run in similar directions together, like cables in a tray, which untangles dense networks and shows the main routes between groups. It uses force-directed edge bundling (Holten and van Wijk, 2009): edges whose direction, length, position and overlap are similar pull on each other, while springs keep each edge smooth. Bundling strength sets how readily edges join a bundle and how tightly they are drawn together. Bundles are computed in the background, so the page stays usable: about 5 seconds for 3,000 edges and half a minute for 8,000. They are recomputed after a layout, after dragging nodes, after using Spread, and when groups or channels are ticked or unticked. Parallel edges between the same pair follow the same bundle. Only visible edges are bundled, up to 10,000 at a time; merging parallel edges or unticking channels brings larger networks under that limit.
  • Thickness: a fixed width, or mapped from each edge's weight between Min and Max px. Edges without a weight get the middle width.
  • Edge opacity: how solid edges are drawn; lower it to let dense networks show their nodes.

Edge channels

Lists each kind of edge with its count. Untick a channel to hide its edges; click its swatch to recolor it. For files loaded from Files, each network (or each value of its Type column) is a channel.

Legend

Display → Legend → Show a legend on the network places a legend at the bottom right of the 2D and 3D network (it steps aside while a node's or edge's details are open). It can include the color scale of numeric values with its ticks and the "no value" color, the groups with their colors and, with Group shapes, their node shapes, and the edge channels when there are two or more. An optional title goes on top. Groups and channels follow what is ticked, and the legend updates as colors, shapes or settings change.

Views made by Show as network on the comparison page come with the legend switched on and an extra Networks part that says which letter stands for which network.

In Export image, Add the legend puts the same legend to the right of the picture, at the picture's scale, in every format; in SVG files it is a separate, editable group. The legend is included whether or not it is shown on screen.

Attributes

Summarizes the extra data carried by nodes, edges and groups: each field, its kind (text, number, yes/no, list), its range or values, and how many items have it. Values appear when you click a node, an edge or a group's i, and search looks through node attribute values.

Analysis

Network Profiler

Besides the statistics below, the page holds Group analysis, the Layout benchmark and the Runtime table.

Tick any mix of the current view and networks from Files, then choose Compute statistics. Results appear side by side so networks can be compared, and Download table saves them as tab-separated text. Each network is profiled as a simple undirected graph. The current view is profiled as shown: only nodes of ticked groups and edges of ticked channels count, and parallel edges from different channels count as one connection.

With Use edge direction ticked (it is off by default), networks with directed edges get a second table, Direction: directed edges, reciprocity (the share of directed edges whose reverse also exists), maximum in- and out-degree, source and sink nodes, strongly connected components, the share of node pairs that can reach each other, and the average directed path length and diameter. Undirected edges can be walked both ways. The main table always treats edges as undirected, as igraph does for these statistics.

StatisticMeaning

Below the table:

  • Degree distribution: how many nodes have each degree. Tick log–log to check for a power law.
  • Most central nodes: the top ten by the measure you choose. Click a name to find it in the 2D Network page when it's in the current view.
  • Communities: choose an algorithm and choose Find communities; Louvain is shown by default. Add as annotation saves the communities (without single nodes) to Files as a new annotation you can view like any other; NORMA's Tau example ships such a file. All algorithms work on the simple undirected network, use a fixed random seed so results repeat, and are scored by the same modularity.
    • Louvain (Blondel et al., 2008): greedy modularity optimisation. Resolution above 1 gives more, smaller communities.
    • Leiden (Traag et al., 2019): Louvain with a refinement step that guarantees every community is connected; same resolution setting.
    • Label propagation (Raghavan et al., 2007): each node repeatedly takes the most common label among its neighbours; very fast. Communities that end up in pieces are split into connected parts.
    • Walktrap (Pons and Latapy, 2006): merges communities that short random walks of the chosen walk length cannot tell apart, and keeps the partition with the highest modularity. Limited to 2,000 nodes.
    • Markov clustering, MCL (van Dongen, 2000): simulates flow on the network; higher inflation gives more, smaller clusters. Clusters that end up in pieces are split into connected parts.
  • Edge channels (current view only, with two or more channels): how many node pairs carry one, two or more channels, and how much each pair of channels overlaps (Jaccard index of their node pairs).

Path-based statistics (distances, betweenness, closeness) visit every node from every node, so networks above 8,000 nodes skip them.

Group analysis

The Group analysis part of the Network Profiler page works on the current view: its ticked groups and channels.

  • Group statistics: for each group, its nodes, the edges inside it and leaving it, its density inside (edges inside divided by all possible pairs), the mean degree inside, its conductance (edges leaving divided by the smaller of the group's and the rest's total degree; lower means a better-separated group) and its share of the modularity. Above the table, the modularity of the grouping says how well the groups as a whole follow the network's structure (above about 0.3 is clear structure). For this number, a node in several groups counts for its first group and a node in none counts as a group of its own. Download statistics saves the table.
  • Open group network opens a new view with one node per group, sized by the group's size, and an edge between two groups weighted (and labelled) by how many of their members are connected; each node also carries its group's edges inside as an attribute. Parallel channels count once. This is the network NORMA-2.0's strategy 3 lays out internally.
  • Enrichment tests whether the groups of an annotation (the terms, for example KEGG pathways) are over-represented, with a one-sided hypergeometric test:
    • Test: the nodes selected in the view (for example a cluster you selected by hand, or the nodes a Select button picked), or each group of an annotation (for example Louvain communities or the view's own groups).
    • Terms from: any annotation in Files, or the current view's groups.
    • Background: the shown nodes of the current view (the usual choice), or those plus every node of the term annotation.
    • Only terms and tested sets with at least Smallest overlap nodes count. p-values are adjusted with the Benjamini–Hochberg procedure within each tested set, and terms with an FDR above the limit are left out.
    The table lists each enriched term with its overlap, its size in the background, the fold enrichment, the p-value and the FDR; Select selects the overlapping nodes in the view, and Download results saves every row with the node names.

Group separation and layout benchmark

The Group separation box in the 2D Layout section measures how well the current layout separates the ticked groups. It updates after every layout, after dragging nodes or using Spread, and when groups are ticked or unticked.

  • Silhouette: the mean silhouette width (Rousseeuw, 1987) of the nodes that are in exactly one group, from their positions. For each node, it compares the mean distance to its own group with the mean distance to the nearest other group. It runs from −1 (groups intermixed) through 0 (no separation) to 1 (compact, well-separated groups). On large networks it is computed on a fixed sample of 1,500 nodes.
  • Inside other outlines: the share of shown nodes that lie inside the convex outline of a group they don't belong to. These are the nodes a hull drawing would misleadingly shade.
  • Outline overlap: the share of the outlined area that is covered by two or more group outlines. Groups of fewer than three nodes have no outline.

The Layout benchmark at the end of the Network Profiler page runs every layout on the current view without changing it: the seven layouts by connections (random as a baseline), the six group arrangements and the three NORMA-2.0 strategies, with the Layout section's settings for group layouts. For each it reports the run time and the three scores, as the mean (and standard deviation) over 1, 3 or 5 runs; the best value in each column is highlighted. Use applies a layout to the view, and Download table saves the results as tab-separated text, ready for a supplementary table.

Network Comparison

The Network Comparison page sets two to ten networks side by side. Tick them in the list: Open views compare what each view shows: its files, and only its ticked groups and channels, and Network files compare uploaded or example networks directly. Choose Compare; each network gets a letter (A to J) and a color used throughout the results. Nodes are matched by name and edges by the pair of nodes they join, ignoring channels. With Use edge direction ticked (off by default), direction counts: A→B, B→A and an undirected A–B are three different edges, and directed statistics are added to the topology table. Untick it to match edges regardless of direction.

  • Networks compared: the size of each network and how many nodes and edges all of them share.
  • Node overlap and Edge overlap: for two or three networks, a Venn diagram with the count in every region (circle sizes are schematic). For any number, an UpSet plot: each column is a group of nodes or edges found in exactly the networks marked by dots below it, sorted largest first; the bars at the left give each network's total. Hover a bar for its count. With many networks only the 40 largest combinations are drawn; the rest are listed in the downloaded table.
  • Jaccard similarity: for each pair, shared items divided by items in either network, from 0 (nothing in common) to 1 (identical). Darker cells are more similar; hover for the counts.
  • Degree agreement on shared nodes: the Spearman correlation of a node's degree in two networks, over the nodes they share. Close to 1 means hubs in one are hubs in the other; negative values (red) mean roles swap. A dash means fewer than three shared nodes.
  • Degree distributions: for each network, the share of nodes with at least a given degree, on log–log axes.
  • Topology side by side: every Network Profiler statistic for each network, with the highest value in each row in bold.

Download table saves the node and edge membership (1 or 0 per network) and the topology table as tab-separated text.

Show as network (new in NORMA 3.0) opens the compared networks as one view, with a legend that explains its colors: which letter stands for which network, which node colors mean "in which networks", and which edge colors mean "A only", "B only" or "Shared". Every edge becomes a channel that says which networks contain it: A only and B only in the networks' colors and Shared in gray (for three or more networks, combinations such as A + C and In all). Nodes are grouped the same way. Tick channels in the Display tab to see, for example, only what the disease network gained, and use edge direction as set for the comparison.

Saving and sharing

Interpreting the results

NORMA's results are pictures and numbers about how groups sit in a network. How to read them:

The network picture

  • Groups: a shaded area (hull, bubble set or fog cloud) shows which nodes belong to a group; a pie-chart node belongs to several groups (one slice each), and a node shape stands for one group. Overlapping shading means shared members or nodes placed close together, not necessarily shared biology.
  • Positions: in layouts by connections, nodes that are close are well connected, so groups that come out compact and separate really are separated in the network. Layouts by groups place groups apart on purpose, which makes them easy to see but says nothing about how separated they are; use the group separation score on a connection layout to judge that.
  • Colors, sizes and edges: node colors show group membership, expression colors or numeric values (read them against the legend; with Same color scale for all steps, colors can be compared between time points). Node size follows the chosen measure (for example degree: bigger nodes have more connections). Edge colors are channels (evidence types, interaction types or networks), thickness can follow weight, and arrows show direction.
  • Edge weights from databases: STRING's confidence score (0–1), the number of shared reactions (Reactome), curation effort (OmniPath) and the IntAct MI-score (0–1). Higher means better supported.

Network Profiler

  • Size and density: density is the share of possible connections present; biological networks are usually sparse (well below 0.1).
  • Connectivity: the number of connected components and the size of the largest; the average path length and diameter say how far apart nodes are (small values mean a "small-world" network).
  • Clustering coefficient (0–1): how often a node's neighbours are connected to each other; high values mean tightly knit neighbourhoods.
  • Degree distribution: a straight line on the log–log plot suggests a few highly connected hubs and many poorly connected nodes.
  • Centrality: nodes with high betweenness lie on many shortest paths (bridges between modules); high closeness means close to all others; high degree means many partners. The top-ten lists point to candidate key nodes.
  • Communities and modularity: each community is a set of nodes more connected among themselves than to the rest. Modularity above about 0.3 indicates clear community structure; compare the communities with your annotation using Group analysis or enrichment.

Group analysis and enrichment

  • Density inside higher than the network's density, and conductance close to 0, mean a group is a real module of the network; conductance near 1 means its members mostly connect outside the group. The modularity of the grouping summarises this for all groups (above about 0.3: the grouping follows the network's structure).
  • Enrichment: fold enrichment above 1 means a term is more common in the tested set than in the background; the FDR (Benjamini–Hochberg adjusted p-value) says how likely that is by chance, and terms with FDR ≤ 0.05 are usually reported. Small overlaps (2–3 nodes) and the choice of background strongly affect the result; the background should be the nodes you could have picked.

Group separation and layout benchmark

  • Silhouette (−1 to 1): above about 0.5, groups are well separated in the picture; 0.25–0.5 moderately; below 0.25 they overlap; negative values mean nodes sit closer to other groups than to their own.
  • Outline intrusion and overlap (0–100%): the share of nodes inside another group's outline and of shaded area covered twice; lower is clearer. The benchmark compares layouts on these scores, averaged over repeated runs.

Network Comparison

  • Venn and UpSet plots count the nodes and edges found in exactly each combination of networks; the tallest UpSet bars show the largest shared or unique parts.
  • Jaccard similarity (0–1): shared items divided by items in either network; 1 means identical. Degree agreement (Spearman, −1 to 1) says whether shared nodes are similarly connected in both networks.
  • Show as network colors each edge by the networks that contain it (A only, B only, shared), so gained and lost connections can be seen directly.

Export and saved work

The Export tab saves and sends: NORMA files, Image, Other tools, Save your work and, at the bottom, Arena3D. Saved work is opened again under Upload Data → Open saved work. Three kinds of NORMA JSON file keep work for later, and each is saved and opened with its own button:

FileHoldsSave / open
View file (.json)One view: its network, groups, colors, attributes and node positions (see JSON format)Save view file / Open view file… or Paste JSON…
Session file (.json)Every open view and every file in FilesSave session file / Open session file…
Settings file (.json)Display settings only, to apply the same look to other viewsSave settings file / Open settings file…

The other JSON files NORMA writes are for other programs: Arena3D (.json) for Arena3D and Cytoscape (.cyjs) for Cytoscape.

  • NORMA files save the current view as a network, annotation or expression file that NORMA can read.
    • Parallel edges are merged into one connection and keep their highest weight, unless you tick Keep channels as a Type column. When any edge is directed, a Direction column is added and A→B and B→A stay separate rows. Files with Type or Direction columns open in NORMA 3.0 as multi-edge or directed networks; earlier versions of NORMA expect only Source, Target and Weight and may not read them, so leave the box unticked for files meant for those versions.
    • Nodes without connections are left out, since NORMA can't list them.
    • Commas in node names become semicolons.
    • With no expression colors loaded, each node gets its first group's color.
  • Only ticked groups and channels (on by default) makes every export below save just the shown part of the view; untick it to save the whole network.
  • Export image… (also the camera button in the top bar) saves the current view as a picture:
    • Formats: PNG (supports a transparent background), JPEG (smaller files), WebP (small, sharp web images), SVG (vector: stays sharp at any size and can be edited in Illustrator, Inkscape or PowerPoint, with nodes, edges, labels and group shading in separate layers) and PDF (one page with a high-resolution image, sized so one screen pixel is one point).
    • Area: the whole network (the ticked groups and channels, with a margin for group shading) or exactly what is on screen.
    • Resolution: 1× to 8× the on-screen size. The screen counts as 96 dpi, so each step adds 96 dpi at the size the network has on screen: 1× is 96 dpi, 2× 192 dpi, 3× 288 dpi (about the 300 dpi journals ask for), 4× 384 dpi, 6× 576 dpi and 8× 768 dpi. Below the options, the dialog shows the image's exact size in pixels, the dpi and print size (inches and centimeters) at the on-screen size, and the print size at 300 dpi. PNG and JPEG files store this dpi, so layout and print programs open them at the right size. For a figure of a given width, divide the pixel width by the dpi you need: a 3,000-pixel-wide image prints 10 inches (25.4 cm) wide at 300 dpi. SVG is vector graphics, sharp at any size, so its "resolution" only sets the picture's size in the file; PDF pages have the on-screen size. Very large images are reduced to the biggest size the browser can draw, and the dialog says so.
    • Background: the theme color, white, transparent (PNG, WebP and SVG) or any color.
    • Add the legend puts the legend set under Display → Legend to the right of the picture.
    • Include group shading adds the shaded group areas, and Leave out selection and search highlighting (on by default) draws the network without yellow selection borders or dimmed nodes; the selection is restored afterwards.
    The picture shows the view as it looks: layout, colors, shapes, pies, labels, edge labels and bundled edges. On the 3D Network page the dialog saves the 3D picture from the current angle, in any of the same formats (SVG included); Whole network fits the network into the picture without changing the angle.
  • Other tools: GraphML (yEd, Cytoscape, igraph, NetworkX), GEXF 1.3 with node colors, sizes and positions (Gephi), SIF (Cytoscape's simple interaction format: source, channel, target) and Cytoscape (.cyjs) (with positions, for Cytoscape desktop and Cytoscape.js). Nodes carry their groups (separated by semicolons), color, size, numeric values and attributes; edges their channel, color, weight, direction and attributes. Like the other exports, they include only ticked groups and channels unless that option is off.
  • Session: Save session file saves every open view (network, positions, settings, 3D camera) and every file in Files, including groupings fetched from STRING, in one JSON file; Open session file… brings it all back, replacing the current views and files.
  • Arena3D: open the view in Arena3D, or save it in Arena3D's formats, with each group as a layer (see Arena3D).
  • Save view file saves everything in the current view, including attributes, colors and group descriptions. Open view file… and Paste JSON… load that format into a new view.
  • Save settings file stores the current view's display options (palettes, layout, sizing, labels, shading, edges) and the theme in a small file that Open settings file… applies to the current view.

Arena3D

Arena3D shows multilayer networks in 3D. Under Export → Arena3D, NORMA turns the current view into an Arena3D network in which each ticked group is a layer:

  • Layers appear in the order of the group list, side by side, each floor in its group's color; nodes in no group get a layer of their own.
  • Inside a layer, nodes keep their 2D positions from NORMA, scaled to fit the layer, and their size.
  • Edges between members of the same group stay in that group's layer; edges between groups run between the layers. A node in several groups appears in each of its layers, and with Link the copies of a node that is in several layers (on by default) its copies are joined by white edges.
  • Edge colors are the channel colors; with weights, stronger edges are more opaque. Several channels are kept as Arena3D channels, and directed edges switch on Arena3D's direction display.
  • Node colors: as shown in NORMA (group, expression or numeric colors; pie nodes take the color of the layer they are drawn in), or the color of each node's layer.
  • Only the ticked groups and channels are exported, like everywhere else in NORMA. Arena3D takes up to 20 layers: with more ticked groups (counting the layer for nodes in no group), only the first 20 in the group list are exported, and the status note says how many groups and nodes were left out. Untick groups you don't need to choose which 20 go.

Comparing networks in Arena3D: after Compare, the Network Comparison page offers the same three ways out for the comparison, with one layer per compared network (A, B, … in the networks' colors). Each layer holds that network's nodes and edges; nodes and edges found only in that network take its color, and common ones are gray. All networks are laid out together, so a node sits at the same place in every layer. Between layers chooses what links the layers: Common edges (an edge found in networks A and B also runs from its source in layer A to its target in layer B, in white), Common nodes (the copies of a node found in several networks are joined, in yellow), or both. Up to 20 layers fit, so all ten comparable networks can go.

Three ways out (for the current view, under Export → Arena3D):

  • Open in Arena3D sends the network to Arena3D (/api/external) and opens the returned link in a new tab. Some browsers block direct calls to other sites; running NORMA with server.py avoids that, because the server passes the request on (see Running NORMA locally or on a server). The address can be changed under Arena3D options.
  • Arena3D (.json) saves the same network in Arena3D's JSON format, to load in Arena3D yourself.
  • Table (.txt) saves Arena3D's tab-separated upload format: SourceNode, SourceLayer, TargetNode, TargetLayer, Weight, Channel. NORMA can read such files back (see Files and formats).
Running, API and troubleshooting

API for other applications

Other programs can open NORMA with their own networks, groups and values, through the API tab's three routes (full reference, code for curl, Python, R and JavaScript, and a tester are on that tab):

  • REST (needs server.py): POST /api/external with a JSON payload returns {"token", "url"}; opening url (norma.html?session=TOKEN) shows the data. Payloads are kept in the server's memory for 24 hours (NORMA_API_TTL_HOURS). GET /api/health tells whether a server offers the API.
  • Links (no server needed): norma.html?data=URL loads a payload file, ?network=URL&annotation=URL&expression=URL loads NORMA files (the other site must allow cross-site downloads), and #json=… carries a small payload inside the link.
  • postMessage (no server needed): a page that opens NORMA in a window or iframe receives norma:ready, sends {"type": "norma:load", "payload": …} and gets norma:loaded back with a summary or an error.

The payload is a JSON object: name; the network as edges (source, target, optional type, weight, directed), as NORMA files or as a complete network view; optional nodes with attributes, groups (and more groupings in annotations), expression (colors or numbers per node), settings (display settings, theme, layout) and tab. A whole session file is accepted too. Each call opens a new view; the network, groupings and values also appear in Files. If a link's data cannot be read, NORMA opens the API tab and says why.

Running NORMA locally or on a server

NORMA is one web page (norma.html) plus a small server program (server.py, Python 3.8 or newer, no extra packages). The same package runs NORMA on your own computer or as a public web server; everything that differs is a setting.

On your own computer

  • Double-click run_local.sh (macOS, Linux) or run_local.bat (Windows), or run python3 server.py: NORMA opens in your browser at http://localhost:8000, reachable only from this computer.
  • Without Python: open norma.html directly. Everything works except the REST API and the relays; database importers then call the services directly, which some browsers block.

As a public web server

  • Run python3 server.py --mode hosted --config norma.config.json (start from norma.config.hosted.json), behind a web server that provides HTTPS on port 443 (deploy/nginx.conf), as a system service (deploy/norma.service) or in a container (Dockerfile, docker-compose.yml). The server can also serve HTTPS itself (--tls-cert, --tls-key, optional --http-redirect-port 80).
  • Hosted mode listens on all addresses, trusts the proxy's X-Forwarded-* headers, logs requests without IP addresses, sends security headers (HSTS over HTTPS) and never opens a browser.
  • Any static web server (nginx, Apache, GitHub Pages) can also serve the folder; settings then come from norma-config.js, and the REST API and relays are not available.

Settings

Settings come from, in increasing priority: built-in defaults, the settings file (norma.config.json, or --config / NORMA_CONFIG), environment variables and command-line options; python3 server.py --print-config shows the result, and --help lists every option. The server hands the page its part of the settings as /norma-config.js.

SettingOption / variableMeaning
mode--mode, NORMA_MODElocal (default) or hosted; sets sensible defaults for the rest
server.host, server.port--host, --port, NORMA_HOST, NORMA_PORTWhere the server listens (local 127.0.0.1, hosted 0.0.0.0; port 8000)
server.publicUrl--public-url, NORMA_PUBLIC_URLThe address users see (e.g. https://norma.example.org/); used in API links
server.tlsCert, tlsKey, httpRedirectPort, hsts--tls-cert, --tls-key, --http-redirect-portServe HTTPS directly, redirect HTTP to it, send Strict-Transport-Security
server.trustProxyNORMA_TRUST_PROXYRead the reverse proxy's forwarded headers (hosted: on)
server.accessLog--access-log, NORMA_ACCESS_LOGoff (local), anonymous (hosted: no IP addresses) or full
api.enabled, ttlHours, maxMB, maxSessions--no-api, NORMA_API, NORMA_API_TTL_HOURS, NORMA_API_MAX_MBThe REST API and how long, how large and how many payloads it keeps
relays.string, arena3d, databases--no-relays, NORMA_RELAYSTurn the relays on or off; without them the page calls the services directly
site.*NORMA_CONTACT_EMAIL, NORMA_INSTITUTION, NORMA_NOTICEName, institution, contact e-mail and page, source code, licence name and link, privacy policy and imprint links, maintenance statement, tested browsers, and a notice shown at the top of the page (e.g. planned maintenance)
app.maxNodes, theme, startTab, cdnFallbackNORMA_MAX_NODESLargest network shown (default 5,000), starting theme and page, and whether Cytoscape.js may be downloaded if the bundled copy is missing

What the server offers

  • API: NORMA's REST API (/api/external, /api/session/TOKEN, /api/health); see API for other applications.
  • STRING relay: /string-api/ passes read-only STRING calls to string-db.org addresses, spaced a second apart. With Database importers → STRING → STRING server → Connect set to Automatically, NORMA uses the relay when it is available and otherwise calls STRING directly.
  • Database relay: /db-api/fetch passes the importers' calls to Reactome, OmniPath, NDEx, IntAct, QuickGO and the GO API, and only to those services' API addresses.
  • Arena3D relay: /arena3d-api/external passes Open in Arena3D to arena3d.org.
  • Package contents: norma.html, index.html (forwards static web servers' root address to norma.html), norma-config.js, server.py, norma.config.json and norma.config.hosted.json, norma_api_client.py (Python template), run_local.sh / run_local.bat, Dockerfile, docker-compose.yml, deploy/ (nginx, systemd), vendor/ (Cytoscape.js), assets/, README.md and NAR_CHECKLIST.md.
  • STRING logo: to show STRING's official logo in the importer, save it as assets/string-logo.png.

Performance

  • Display → Performance → Draw with WebGL uses Cytoscape.js's WebGL renderer, which draws large networks much faster. It is experimental: the choice is made when the page starts, so NORMA asks to reload the page (save the session first to keep your views). Adding ?webgl=1 or ?webgl=0 to the address sets it for one visit. Exported images, group shading, the 3D page and everything else work the same.
  • The Runtime table at the end of the Network Profiler page times the main steps on random networks of 100 to 5,000 nodes in your browser: reading the network file, building the network, the weighted layout, edge bundling, the profile statistics, Louvain and the group separation score. Drawing time depends on the screen and is not included. Download table saves the times with the browser and processor count, for a supplementary table.
  • Network size: NORMA shows networks of up to 5,000 nodes. A network file, JSON file, session or combination of networks with more nodes is cut to its first 5,000 nodes (in the order they first appear) and the edges among them, and a message says how much was left out. To study part of a bigger network, filter it first (for example to a pathway, a STRING neighbourhood or a community).
  • Networks of a few thousand nodes are comfortable; beyond that, turn on WebGL drawing, turn off labels, curved edges and edge bundling, and use the grid or weighted force-directed layout.

Keyboard shortcuts

KeysAction
Ctrl+Z (⌘Z)Undo the last change to the view
Ctrl+Shift+Z or Ctrl+YRedo
Ctrl+A (⌘A)Select every shown node (2D and 3D Network pages)
EscapeClear the selection; in the search box, clear the search; in a dialog or shape chooser, close it
Enter in the search boxZoom to the matching nodes
Shift-drag on the backgroundDraw a selection box
Shift-click or Ctrl/⌘-clickAdd a node to the selection or remove it
Double-clickOn the background: fit the network; on a node: center it
Left/Right arrows on a tabMove between pages or between the Data and Display tabs
Arrow keys in the shape chooserMove between shapes; Enter picks one
Arrow keys on the 3D networkTurn and tilt the view (with Shift: in bigger steps)
+ / on the 3D networkZoom in and out
F or 0 on the 3D networkFit the network to the screen

Troubleshooting

  • Only part of my network appears: NORMA shows up to 5,000 nodes and keeps the first 5,000 of a larger network (see Performance).
  • A network file is rejected: its first line must be the header Source, Target (optionally Weight and Type), separated by tabs.
  • Groups are missing: node names in the annotation must match the network exactly, including capitalization. Names that don't match are discarded when the annotation is uploaded and when it is shown; the status notes list them, and Download corrected annotation saves the cleaned file.
  • An annotation was not kept: none of its names matched the networks it was checked against. Upload it together with its network, or tick the right network before uploading it.
  • A node doesn't take its group's shape: it is shown with more than one active group, so it stays a circle. Untick the other groups to see the shape.
  • Arena3D doesn't open: if the browser blocked the new tab, use the Open Arena3D link in the status note. If Arena3D can't be reached, run NORMA with server.py, or save the Arena3D (.json) and load it in Arena3D.
  • STRING can't be reached: check the internet connection, and run NORMA with server.py (see Running NORMA locally or on a server) so that requests go through its relay. If the server is running but requests fail, set Connect to Through this server to see its error. If a request takes too long, lower Interactors to add or try again later.
  • STRING found none of the names: check the spelling and the organism; a gene name from one species often isn't found in another.
  • A STRING grouping is missing: that collection had no terms passing the FDR and group-size limits, or isn't available for the organism. The notes list what STRING returned; raise the FDR limit or lower Smallest group.
  • A file was read as the wrong type: remove it, pick its type in the upload box and upload it again.
  • The view is slow: try straight edges instead of bundled or curved ones, turn off group shading or use the hull style instead of fog, merge parallel edges, or deactivate groups you don't need.
  • Colors look alike: switch to a colorblind-safe palette, or click a swatch to set a color yourself.
  • No arrows are shown: the edges aren't marked as directed, or Edges → Direction is set to undirected. Choose Treat all edges as directed, or upload the file again as directed or with a Direction column.
  • B→A disappeared after uploading: the file was read as undirected, where A→B and B→A are the same connection. Delete it (its in Files) and upload it again with Networks: directed.
  • My parallel edges became one edge: the network file has no Type column, or Edges → Parallel edges is set to merge. Add a Type column, show the networks together as separate files, or switch back to drawing each channel.
  • A function ignores some nodes or edges: layouts, sizes, statistics, Network Comparison and exports work on the ticked groups and channels only. Tick them again, or untick Only ticked groups and channels before exporting.
  • An exported image is smaller than chosen: the browser can't draw images beyond about 16,000 pixels per side; the dialog says when the size was reduced. Choose a lower resolution or export only what is on screen, or use SVG, which has no size limit.
  • The 3D picture is slow: turn off group shading or shaded spheres, lower Depth fading, hide labels, or untick groups and channels you don't need. Large networks are drawn simplified while they move.
  • The 3D network looks flat: the layout is Same as 2D (flat), or the camera is facing it from the front. Run another 3D layout or choose View from → Tilted.
  • A few edges are missing: edges between two nodes that sit on top of each other can't be drawn. Run a layout again or use Spread.

NORMA 3.0 The Network Makeup Artist

A browser application for visualising and analysing biological networks together with their functional annotations: how genes, proteins or other entities that share a pathway, complex, GO term or community sit in a network, and how several networks compare.

How to cite

If NORMA helps your work, please cite:

  • Karatzas E, Koutrouli M, Baltoumas FA, Papanikolopoulou K, Bouyioukos C, Pavlopoulos GA. The network makeup artist (NORMA-2.0): distinguishing annotated groups in a network using innovative layout strategies. Bioinformatics Advances. 2022;2(1):vbac036. PMID: 36699373, doi:10.1093/bioadv/vbac036 (NORMA-2.0, group-aware layout strategies)
  • Koutrouli M, Karatzas E, Papanikolopoulou K, Pavlopoulos GA. NORMA: The Network Makeup Artist, a web tool for network annotation visualization. Genomics, Proteomics & Bioinformatics. 2022;20(3):578–586. doi:10.1016/j.gpb.2021.02.005 (the original NORMA application)

Please also cite the databases and methods you use; see Resources and methods.

Bubble-set groups outlines that hug only the members −2 0 2 log2FC Numeric values color scales, sizes, legends, steps Ribosome Proteasome Spliceosome Glycolysis −log10 FDR Communities and enrichment Leiden, MCL, Walktrap; term tests 3D network rotate, tilt and zoom freely A B C shared edges Compare networks UpSet plots, Venn diagrams, statistics

What NORMA does

Networks of interacting molecules are easier to understand when you can see which nodes belong together. NORMA takes a network and one or more annotations (groupings of nodes, such as pathways, complexes, GO terms, tissues or communities) and shows them together: groups are shaded with hulls, bubble sets or fog clouds, nodes in several groups become pie charts, and layouts can arrange the network by its connections or by its groups, so that groups separate cleanly.

On top of the picture, NORMA adds node colors from expression data or numeric values, node sizes from topology, several edge channels between the same nodes (evidence types, interaction types or whole networks), directed edges, a 3D view, network statistics, community detection, group enrichment and a side-by-side comparison of up to ten networks. Networks can be uploaded as simple tab-separated files, fetched from six public databases, and exported as images, as files for Cytoscape, Gephi and yEd, or straight into Arena3D.

Everything runs in your browser, from a single file (norma.html); a small optional server (server.py) relays database requests. NORMA 3.0 continues NORMA and NORMA-2.0, which introduced group-aware layout strategies.

Highlights

Groups made visibleConvex hulls, bubble sets and fog clouds; pie-chart nodes; one shape per group; group colors and descriptions.
Group-aware layoutsThe NORMA-2.0 strategies, groups as blocks, clusters or layers, plus force-directed, Kamada–Kawai and stress majorization; a separation score and benchmark.
Multi-edge and directedSeveral channels per node pair, merged, fanned, bundled or labelled; arrows and direction-aware statistics.
Values and legendsExpression colors, numeric color scales, time-series steps, node sizes and exportable legends.
AnalysisNetwork profiles, five community detection methods, group statistics, enrichment, neighbourhoods and shortest paths.
ComparisonUp to ten networks with Venn and UpSet plots, similarity and degree statistics, drawn as one network or sent to Arena3D.
Database importersSTRING, Reactome, OmniPath, NDEx, IntAct and the Gene Ontology, with their groupings.
3D and exportA 3D page, high-resolution PNG, SVG and PDF, NORMA files, GraphML, GEXF, SIF, Cytoscape, Arena3D and sessions.

Data sources

NORMA reads your own files and the resources below. Nothing is sent to a resource until you use its importer; see Database importers in Help for how each one works.

ResourceNetworkGroupingsWhat NORMA fetches
STRINGYesYesProtein association networks with evidence channels; enriched GO, KEGG, Reactome, UniProt, domain, disease and tissue terms
ReactomeYesYesThe molecules of a pathway's reactions, linked when they share a reaction; sub-pathways and reactions as groups
OmniPathYesYesSigned, directed signalling, TF–target and ligand–receptor interactions; complexes, intercellular roles, pathway annotations
NDExYesLimitedPublic networks with their layout; groups from node attributes
IntActYesNoExperimentally detected interactions with MI-scores and interaction types
Gene OntologyLimited (GO-CAM)YesCausal GO-CAM models as networks; GO terms (QuickGO) as groups for any network
Arena3DExportViews and comparisons as multilayer networks, one layer per group or network

None of these services needs an account for public data. Please follow each resource's terms of use and cite it when you use its data (see Resources and methods).

What's new in NORMA 3.0

Everything works on the groups and channels you tick

This is the main difference from earlier versions of NORMA. Untick groups under Node groups or channels under Edge channels, and every function works on the part that stays ticked: nodes in at least one ticked group, and edges of ticked channels between those nodes. Nothing has to be re-uploaded or filtered by hand.

  • Layouts, both by connections and by groups (including the NORMA-2.0 strategies), arrange only the shown nodes using only the ticked channels; hidden nodes keep their places.
  • Node sizes by degree, betweenness, closeness or clustering, and the statistics in a node's details panel, are computed on the shown part.
  • Group shading, node shapes and pie slices follow the ticked groups: a node in two groups turns into a single-group shape when the other group is unticked.
  • Edge bundling, edge merging and edge labels use only the ticked channels.
  • Search finds only shown nodes, and Spread and Fit to screen work on what you see.
  • The Network Profiler and Network Comparison pages analyse the shown part of each view.
  • Exports (NORMA files and JSON) save the shown part, unless you untick Only ticked groups and channels.

So you can, for example, tick two KEGG pathways and one evidence channel, lay them out, size nodes by betweenness within that sub-network, profile it, compare it with another view, and export exactly that.

Multi-edge networks are supported

Previous versions of NORMA did not support multi-edge graphs. A network could hold only one connection per pair of nodes: repeated connections were removed automatically when a file was loaded, so a pair supported by, say, both experiments and text mining ended up as one plain edge.

NORMA 3.0 keeps every connection. The same pair of nodes can be linked by several edges, each belonging to a channel (an interaction type, an evidence source or a whole network):

  • An optional Type column in a network file keeps one edge per pair and type; only exact repeats of the same pair and type are removed (see Network file).
  • Ticking several network files overlays them, with each network as its own channel (see Several networks and multi-edges).
  • JSON files and the built-in demos can carry any number of edges per pair, each with its own type, weight, direction and attributes.
  • Channels can be colored, ticked and unticked one by one; parallel edges can be fanned apart, merged per pair, bundled or labelled; and layouts, node sizes, the Network Profiler and Network Comparison can be limited to the ticked channels.

Directed networks

Edges can point from a source to a target, and each view can handle its network as directed or undirected. Arrows show the direction; a Direction column in network files, a directed/undirected choice when uploading, and a directed field in JSON bring direction in; in- and out-degree, direction-following betweenness and closeness, reciprocity, strongly connected components and directed path lengths analyse it. See Directed and undirected networks.

A 3D Network page

The new 3D Network tab shows the current view in three dimensions: the same groups, colors, pies, shapes, labels, arrows and group shading, with its own 3D layouts (weighted force-directed, groups as 3D clusters, groups on stacked layers, height by hierarchy or degree), rotate, pan and zoom controls, automatic rotation and 3D image export. See 3D Network.

Import networks and groupings from STRING

STRING in the Database importers tab fetches the interaction network of one or more proteins for any organism, with control over the number of interactors, confidence, network type and evidence channels, and turns enriched GO terms, KEGG and Reactome pathways, UniProt keywords, protein domains, diseases, tissues and more into groupings you can switch between. See Importing from STRING.

Also new

  • Deleting files and views: views, networks, groupings and expression files can be removed completely with Delete… next to Rename, the next to the Grouping menu, or the in Files.
  • API: other applications can open NORMA with their networks and groups by REST, links or postMessage; see the API tab.
  • Welcome tab and tidier menus: a permanent Welcome tab; every sidebar section folds open and closed from its title; separators group related options; the three NORMA JSON files are named view, session and settings files.
  • Database importers: besides STRING, Reactome, OmniPath, NDEx, IntAct and the Gene Ontology (GO-CAM networks and GO term groupings), in a tab of their own; exports moved to an Export tab.
  • Welcome page: NORMA starts on a page that shows what it does, with quick ways to open an example, fetch from STRING or upload files.
  • Classic layouts: Kamada–Kawai and stress majorization, for connections, as group strategies and inside groups.
  • Group analysis: group statistics and the modularity of a grouping, a network of groups, and enrichment of annotation terms in selected nodes or in each group of another annotation.
  • Comparison as a network: Show as network merges compared networks into one view whose edges say which networks contain them.
  • Local exploration: a node's neighbourhood or the shortest paths between two nodes, opened as a new view.
  • Time series and conditions: step through value columns or several numeric files, by hand or as an animation, with the layout fixed.
  • More export formats and sessions: GraphML, GEXF, SIF and Cytoscape (.cyjs) for Cytoscape, Gephi and yEd, and whole sessions (all views and files) in one file.
  • Performance: optional WebGL drawing for large networks, and a runtime table of the main steps.
  • Export to Arena3D: open the current view in Arena3D with one click, each group as its own layer, or save it as an Arena3D file (.json) or table (.txt); Arena3D tables can also be uploaded.
  • Showcase examples: a directed signalling cascade with simulated fold changes, a simulated healthy-vs-disease pair for Network Comparison, and Arena3D's seven-layer example (see Examples).
  • Numeric expression values: log2 fold changes, p-values or any numbers in expression files, shown on diverging or sequential color scales and as node size, with an optional legend that can also go into exported images.
  • More community detection: Leiden, label propagation, Walktrap and Markov clustering next to Louvain in the Network Profiler, each able to become a grouping.
  • A number for group separation: silhouette width, nodes inside other groups' outlines and outline overlap after every layout, and a layout benchmark that compares all layouts, including the NORMA-2.0 strategies, on the current view.
  • STRING import: fetch a protein's interaction network from the STRING database for any organism, with control over the number of interactors, confidence and evidence channels, and turn its enriched GO terms, KEGG and Reactome pathways, keywords, domains, diseases, tissues and more into groupings.
  • A 3D network: the 3D Network page shows the current view in three dimensions, with the same groups, colors, shapes, labels, arrows and shading, its own 3D layouts, and rotate, pan and zoom controls.
  • Working with several visualizations: views, each with its own settings; a Grouping list in the top bar to regroup a view while keeping positions; undo and redo for every change to a view.
  • A clearer screen: the View list in the top bar, colored labels saying which network, grouping and colors are shown, node, edge, channel and group counts, and color-coded sidebar sections split into Upload Data, Database importers, Display and Export (see Finding your way around).
  • Layout: arrangement by connections or by groups, NORMA-2.0's three group strategies, groups as non-overlapping blocks, a weighted Fruchterman–Reingold layout, and a Spread slider.
  • Groups: Bubble Sets–style contours that hug each group, node shapes per group alongside group colors, a filter for long group lists, pies of up to 16 slices, and group details with shared members.
  • Labels: adjustable sizes and colors for node and edge labels, edge labels showing channels, weights or any edge attribute, and hiding labels when zoomed out.
  • Edges: edge bundling, merging of parallel edges, curved fan-out, weight-based thickness and edge opacity.
  • Exploring: search by name, prefix, suffix or regular expression in a panel that can be minimized; selecting several nodes (shown in yellow); zoom without limits while the network stays in frame.
  • Data: attributes on nodes, edges and groups (Attributes, JSON format); annotation checks on upload with a corrected annotation to download (Files and formats).
  • Direction: networks are handled as undirected by default, as in earlier versions of NORMA; directed data can be shown with arrows in one click (see Directed and undirected networks).
  • Analysis: a Network Profiler with a short description of each statistic, Louvain communities that can be added as an annotation, and Network Comparison of up to ten networks with Venn diagrams, UpSet plots, similarity matrices, degree agreement and topology side by side.
  • Output: image export in high resolution as PNG, JPEG, WebP, vector SVG or PDF; NORMA files and JSON limited to the ticked groups and channels if you like.
  • Examples: NORMA's example datasets and built-in demos, with every file downloadable.
  • A white theme by default, and keyboard shortcuts.

Resources and methods

NORMA builds on the following software, data resources and published methods. When you use their data or results, please cite them as well.

Software

  • Cytoscape.js draws the 2D network; statistic definitions follow igraph; color scales follow ColorBrewer and viridis.

Data resources

  • STRING: Szklarczyk et al., Nucleic Acids Research 2023;51(D1):D638–D646.
  • Reactome: Milacic et al., Nucleic Acids Research 2024;52(D1):D672–D678.
  • OmniPath: Türei et al., Molecular Systems Biology 2021;17:e9923.
  • NDEx: Pratt et al., Cell Systems 2015;1(4):302–305.
  • IntAct: del Toro et al., Nucleic Acids Research 2022;50(D1):D648–D653.
  • Gene Ontology: Gene Ontology Consortium, Genetics 2023;224(1):iyad031.
  • Arena3D: Karatzas et al., Nucleic Acids Research 2021;49(W1):W36–W45, doi:10.1093/nar/gkab278.

Methods

  • Community detection: Louvain (Blondel et al., J Stat Mech 2008:P10008), Leiden (Traag et al., Sci Rep 2019;9:5233), label propagation (Raghavan et al., Phys Rev E 2007;76:036106), Walktrap (Pons and Latapy, J Graph Algorithms Appl 2006;10(2):191–218) and MCL (van Dongen, PhD thesis, University of Utrecht, 2000).
  • Layouts: Kamada and Kawai (Inf Process Lett 1989;31(1):7–15); stress majorization (Gansner, Koren and North, Graph Drawing 2004, LNCS 3383:239–250) with a pivot-MDS start (Brandes and Pich, Graph Drawing 2006, LNCS 4372:42–53).
  • Edge bundling: Holten and van Wijk's force-directed method (Computer Graphics Forum 2009;28(3):983–990, doi:10.1111/j.1467-8659.2009.01450.x).
  • Statistics: enrichment p-values adjusted as in Benjamini and Hochberg (J R Stat Soc B 1995;57(1):289–300); group separation by the silhouette width of Rousseeuw (J Comput Appl Math 1987;20:53–65).

Team, access and maintenance

  • Team: NORMA is developed by the Pavlopoulos Lab (GitHub). Source code: github.com/PavlopoulosLab/NORMA.
  • Access: NORMA is free and open to all users. It needs no login, registration or e-mail address, and no installation: it runs in the web browser.
  • Licence: NORMA is released under the licence shown on the Welcome page (MIT by default), which allows free use, including non-commercial and commercial use. The data resources have their own terms of use.

    Privacy, data and cookies

    • Your data stays private. Files you upload, the networks you build, views and sessions are processed in your own browser and are not uploaded anywhere. Nobody else can see them. Deleting a file removes it and everything read from it; closing the browser tab removes everything.
    • What leaves your browser: only what you send yourself: the names you search for with a database importer (to that database), a network you open in Arena3D (to Arena3D), and a payload you send to the NORMA REST API (to that server). On a NORMA server, these requests pass through the server, which does not store them; API payloads are kept in the server's memory only for the time shown in the API tab, and only someone with the link can open them.
    • No cookies, no tracking. NORMA sets no cookies and uses no analytics, advertising or third-party tracking. The only thing it stores is the WebGL drawing preference, in your browser's local storage, when you change it. Public NORMA servers log requests without IP addresses by default.
    • Third-party content: NORMA loads no fonts, scripts or images from other sites (a copy of Cytoscape.js is bundled).