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
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.
- 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.
- Tick networks and choose an annotation and an expression file, then choose Open in new view.
- Style that view in the Display tab: layout, groups, colors, sizes, labels and edges.
- Repeat with other combinations. Each becomes its own view; switch between them with the View list in the top bar.
- 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.
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.
| Example | Files | Source |
|---|---|---|
| STRING: TP53 interactors | Network (weighted), groups, expression | STRING |
| STRING: BCAR3 interactors | Network; GO biological process, GO molecular function, KEGG | STRING |
| Drosophila Tau network | Network; KEGG, Louvain communities; expression | PMID 31488613, doi:10.1523/JNEUROSCI.0391-19.2019 |
| Human gene co-expression | Network; GO biological process, molecular function, cellular component; KEGG; MCODE cluster colors | PMID 19081792, doi:10.1371/journal.pone.0003911, bioinfow.dep.usal.es/coexpression |
| COVID-19 | Network; InterPro, SMART, GO (three), KEGG | IntAct |
| Gallus gallus | Network; KEGG | BioGRID |
| 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 documentation | The small example from NORMA's help pages | NORMA |
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 output | Shows |
|---|---|
| Drosophila Tau network | A published network with KEGG pathways, Louvain communities and expression colors; try the Network Profiler and Group analysis on it. |
| STRING: TP53 interactors | A STRING network with evidence channels, groups and expression. |
| Signalling cascade | Directed, multi-channel edges with numeric values, a color scale and a legend. |
| Healthy vs disease | Two networks to compare on the Network Comparison page. |
| Arena3D example | Seven layers, ready to open in Arena3D. |
| Four overlapping modules in 3D | Pie-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": trueat the top makes every edge directed, and"directed": trueorfalseon 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
uniprotattribute). 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,p53or 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,grouporgroups,sizeandcolorhave fixed meanings; any other field is kept as an attribute. - Edges:
id,source,target,type(the channel) andweighthave 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": truemakes every edge without its owndirectedfield 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,descriptionandcolorhave fixed meanings; anything else is a group attribute. Attributes can also be nested under anattrsobject. - Colors:
nodeColorsandedgeColorsfix group and channel colors. - Shapes:
groupShapesgives 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
groupOrderlist sets the order of groups in the legend and the order palette colors are handed out. - Settings: an optional
configobject holds display settings in the same shape as a settings file. For example,"edgeLabelContent": "attr:pmid"labels edges with theirpmidattribute.
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
roleattribute (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.
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
colorfield) 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.
- 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.
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.
| Statistic | Meaning |
|---|
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.
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.
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:
| File | Holds | Save / 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 Files | Save session file / Open session file… |
| Settings file (.json) | Display settings only, to apply the same look to other views | Save 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.
- 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 withserver.pyavoids 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).
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/externalwith a JSON payload returns{"token", "url"}; openingurl(norma.html?session=TOKEN) shows the data. Payloads are kept in the server's memory for 24 hours (NORMA_API_TTL_HOURS).GET /api/healthtells whether a server offers the API. - Links (no server needed):
norma.html?data=URLloads a payload file,?network=URL&annotation=URL&expression=URLloads 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 getsnorma:loadedback 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) orrun_local.bat(Windows), or runpython3 server.py: NORMA opens in your browser athttp://localhost:8000, reachable only from this computer. - Without Python: open
norma.htmldirectly. 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 fromnorma.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.
| Setting | Option / variable | Meaning |
|---|---|---|
mode | --mode, NORMA_MODE | local (default) or hosted; sets sensible defaults for the rest |
server.host, server.port | --host, --port, NORMA_HOST, NORMA_PORT | Where the server listens (local 127.0.0.1, hosted 0.0.0.0; port 8000) |
server.publicUrl | --public-url, NORMA_PUBLIC_URL | The address users see (e.g. https://norma.example.org/); used in API links |
server.tlsCert, tlsKey, httpRedirectPort, hsts | --tls-cert, --tls-key, --http-redirect-port | Serve HTTPS directly, redirect HTTP to it, send Strict-Transport-Security |
server.trustProxy | NORMA_TRUST_PROXY | Read the reverse proxy's forwarded headers (hosted: on) |
server.accessLog | --access-log, NORMA_ACCESS_LOG | off (local), anonymous (hosted: no IP addresses) or full |
api.enabled, ttlHours, maxMB, maxSessions | --no-api, NORMA_API, NORMA_API_TTL_HOURS, NORMA_API_MAX_MB | The REST API and how long, how large and how many payloads it keeps |
relays.string, arena3d, databases | --no-relays, NORMA_RELAYS | Turn the relays on or off; without them the page calls the services directly |
site.* | NORMA_CONTACT_EMAIL, NORMA_INSTITUTION, NORMA_NOTICE | Name, 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, cdnFallback | NORMA_MAX_NODES | Largest 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/fetchpasses the importers' calls to Reactome, OmniPath, NDEx, IntAct, QuickGO and the GO API, and only to those services' API addresses. - Arena3D relay:
/arena3d-api/externalpasses Open in Arena3D to arena3d.org. - Package contents:
norma.html,index.html(forwards static web servers' root address tonorma.html),norma-config.js,server.py,norma.config.jsonandnorma.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.mdandNAR_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=1or?webgl=0to 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
| Keys | Action |
|---|---|
| Ctrl+Z (⌘Z) | Undo the last change to the view |
| Ctrl+Shift+Z or Ctrl+Y | Redo |
| Ctrl+A (⌘A) | Select every shown node (2D and 3D Network pages) |
| Escape | Clear the selection; in the search box, clear the search; in a dialog or shape chooser, close it |
| Enter in the search box | Zoom to the matching nodes |
| Shift-drag on the background | Draw a selection box |
| Shift-click or Ctrl/⌘-click | Add a node to the selection or remove it |
| Double-click | On the background: fit the network; on a node: center it |
| Left/Right arrows on a tab | Move between pages or between the Data and Display tabs |
| Arrow keys in the shape chooser | Move between shapes; Enter picks one |
| Arrow keys on the 3D network | Turn and tilt the view (with Shift: in bigger steps) |
| + / – on the 3D network | Zoom in and out |
| F or 0 on the 3D network | Fit 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(optionallyWeightandType), 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.