bimforce
werkbank · graph & data

Kleurcodering voor graafweergaven

Een graaf met negentig node-types wordt pas leesbaar als kleur iets betekent. Dit is de methode die we daarvoor gebruiken — plus de kant-en-klare stylesheet.

Neo4j Browser geeft elk node-label een willekeurige kleur. Dat werkt tot een stuk of tien types. Daarna kijk je naar een schaal met bolletjes waarin je niets meer terugvindt.

De voor de hand liggende oplossing — zelf kleuren toewijzen — levert een schema dat per node klopt maar als geheel wankelt. Dat was ook precies de eerste versie van ons GRiDS-schema: binnen één familie lagen de drie donkere niveaus vlak bij elkaar terwijl het lichtste ver wegsprong, en het punt waarop witte tekst zwart moest worden viel per familie ergens anders.

De oorzaak is methodisch, niet esthetisch. Wie met de hand kleuren kiest, krijgt ongelijke lichtheidsstappen. En zonder gelijke stappen bestaat er geen punt waar je consequent kunt omschakelen van witte naar zwarte tekst.

Twee assen, drie regels

De oplossing is een perceptueel afgestemde kleurenwaaier — een palet waarin elke stap over alle kleurtonen heen op ongeveer dezelfde lichtheid ligt. Wij gebruiken de Tailwind CSS-waaier: 22 tonen × 11 stappen, expliciet daarop afgestemd. Dan wordt kleur een regel in plaats van een afweging.

Kleurtoon draagt de betekenis. Elke functionele familie krijgt één toon. Alles wat met labels te maken heeft is groen, alles wat met projecten te maken heeft is rood.

Verzadiging draagt het niveau. Datamodellen hebben bijna altijd een hiërarchie — container, groepering, item, sjabloon. Die vier krijgen altijd dezelfde vier stappen uit de waaier: 800, 600, 400, 200. Steeds 15 tot 20 procentpunt lichtheid uit elkaar, dus geen sprongen.

Tekstkleur volgt uit de rest. Stap 600 en donkerder krijgt witte tekst, stap 500 en lichter krijgt zwarte tekst. Omdat de waaier afgestemd is, klopt die grens in alle 22 tonen. In elke familie zonder uitzondering: de bovenste twee niveaus wit, de onderste twee zwart.

Daar komen nog twee praktische afspraken bij. De rand van een bol is altijd twee stappen donkerder dan de vulling, zodat vorm en kleur elkaar niet in de weg zitten. En node-types met miljoenen instanties krijgen bewust een lichte tint en een kleine diameter — anders overspoelen ze de weergave en zie je de structuur niet meer waar het je om ging.

De volgorde van de kleurcirkel benutten

Zet families in de volgorde waarin ze op de kleurcirkel staan, en laat verwante domeinen naast elkaar vallen. Iemand die het schema niet kent leest dan alsnog "dit hoort bij elkaar". Voor GRiDS levert dat deze indeling op:

Domein Kleurtonen
Portfoliorood projecten · steen locaties · oranje assets · amber kosten
Onderhoud & semantiekgeel technische omschrijvingen · limoen classificatie · groen labels · smaragd eigenschappen · turkoois concepten
Eisen & toetsingcyaan compliance · hemelsblauw wettelijk kader · blauw eisen
BIMindigo objecten · violet modellen · paars IFC-brondata
Verwerkingfuchsia filters · roze mappings · rozerood exports
Kaderneutrale grijzen voor organisatie, gebruikers, bestanden en technische hulpnodes

Neutrale tonen zijn voor kaderdomeinen: organisatie, toegang, bestandsopslag, technische hulpnodes. Verzadigde tonen blijven gereserveerd voor inhoudelijke families. Dat alleen al scheelt veel — de helft van wat je in een graaf ziet is kader.

Het resultaat

Elke rij hieronder is één familie. Van links naar rechts loopt het niveau van container naar sjabloon, met het nummer van de stap uit de waaier erbij.

Organisatie — neutralkader waarin alles hangt

Company
900
Department
800
Actor
600
Role
300

Gebruikers — zincaccounts en rollen

Users
800
UserSet
600
User
400
UserTemplate
200

Projecten — redprojectstructuur

Projects
800
ProjectSet
600
Project
400
ProjectTemplate
200

Locaties — stonefysieke locaties en gebouwen

Locations
800
LocationSet
600
Location
400
LocationTemplate
200

Assets — orangeinstallaties en elementen

Assets
800
AssetSet
600
Asset
400
AssetTemplate
200

Kosten / MJOP — amberkostensoorten, van investering naar restwaarde

InitialCost
800
ReplacementCost
700
RenovationCost
600
OperationalMaintenanceCost
400
OperationalEnergyCost
300
ResidualValue
200

Technische omschrijvingen — yellowTO-bibliotheek

TOs
800
TOSet
600
TO
400
TOTemplate
200

Classificatie — limeclassificatiesets en codes

Classificationsets
800
ClassificationsetSet
600
Classificationset
400
ClassificationsetTemplate
200
Classification
300

Labels — greenlabelbibliotheek

Labels
800
LabelSet
600
Label
400
LabelTemplate
200

Properties — emeraldeigenschappen en waarden

Properties
800
PropertySet
600
Property
400
PropertyTemplate
200
Value
100

Toetsing & compliance — cyankeuringen, checks en overrides

Compliance
800
Check
600
CheckItem
400
ManualOverride
300
ComplianceTemplate
200

Wettelijk kader — skywet- en regelgeving

Frameworks
800
FrameworkSet
600
LegalFramework
400

Eisen — bluerequirements-bibliotheek

Requirements
800
RequirementSet
600
Requirement
400
RequirementTemplate
200
RequirementItem
300

Objecten — indigoobjectstructuur

Objects
800
ObjectSet
600
Object
400
ObjectTemplate
200

Modellen — violetBIM-modellen

Models
800
ModelSet
600
Model
400
ModelTemplate
200

IFC-brondata — purpleafgeleide importdata uit IFC-bestanden

IfcClassifications
800
IfcClassification
700
IfcClass
600
IfcPropertyset
400
IfcProperty
300
IfcAttribute
200

Filters — fuchsiaselectieregels

Filters
800
FilterSet
600
Filter
400
FilterTemplate
200

Mappings — pinkvertaalregels

Mappings
800
MappingSet
600
Mapping
400
MappingTemplate
200

Exports — roseuitvoerdefinities

Exports
800
ExportSet
600
Export
400
ExportTemplate
200

Bestanden & media — slatefiles, documenten en afbeeldingen

Files
800
Document
700
FileSet
600
File
400
Image
300
FileTemplate
200

Semantische koppeling — tealgedeelde concepten

Concept
600

Open punten — redaccent buiten de project-ramp, dikke rand

Restpunt
500

Technisch — graygeneratie-markers, bewust weggedrukt

_CSVGEN
200
Zelf gebruiken

De stylesheet voor GRiDS

92 node-types en 84 relatietypes, kant en klaar. Sleep het bestand in het venster van Neo4j Browser, of laad het via Browser Settings → Graph Stylesheet. Terugdraaien met :style reset.

Download .grass

Drie dingen die we onderweg leerden

Genereren, niet tikken. Een stylesheet van negentig regels met de hand onderhouden is vragen om drift. Wij genereren hem uit een script waarin alleen de families en hun kleurtonen staan; de regels zitten in de generator. Een schemawijziging is dan één regel code in plaats van tachtig zoek-en-vervang-acties.

Zet geen commentaar in een .grass-bestand. De parser van Neo4j Browser is een eenvoudige tokenizer, geen CSS-engine. Documentatie hoort ernaast, niet erin.

Controleer je captions. Verwijst een caption naar een property die niet bestaat, dan toont de Browser een lege bol zonder foutmelding. In GRiDS hebben de meeste nodes een name, maar niet alle — waarden, afbeeldingen en overrides niet.

Als bijvangst dwingt zo'n inventarisatie je om alle labels te tellen, en dat legt structuurproblemen bloot die je anders niet ziet: lege containers, node-types die veel talrijker zijn dan verwacht, en resten van een vorige modelversie. De helft van de waarde van dit werk zat niet in de kleuren.