Graphviz + SBOLv1.0
Update:
Graphviz now has SBOLv 1.0 support!
I implemented the Synthetic Biology Open Language (SBOLv) symbols for Graphviz to easily generate SBOLv compliant diagrams.
see my original post on using Graphviz to draw genetic circuits
Gene Expression Symbols:
digraph G { rankdir=LR; promoter -> operator [arrowhead=none]; operator -> cds [arrowhead=none]; cds -> utr [arrowhead=none]; utr -> terminator [arrowhead=none]; promoter [shape=promoter labelloc="b"]; operator [shape=square width=0.2 label=""]; cds [shape=cds]; utr [shape=utr labelloc="b"]; terminator [shape=terminator labelloc="b"]; }
digraph G { rankdir=LR; insulator -> ribosite [arrowhead=none]; ribosite -> rnastab [arrowhead=none]; rnastab -> proteasesite [arrowhead=none]; proteasesite -> proteinstab [arrowhead=none]; insulator [shape=insulator label=""]; ribosite [shape=ribosite label="ribonuclease site" labelloc="b"]; rnastab [shape=rnastab label="rna stability" labelloc="b"]; proteasesite [shape=proteasesite label="protease site" labelloc="b"]; proteinstab [shape=proteinstab label="protein stability" labelloc="b"]; }
DNA Construction Symbols:
digraph G { rankdir=LR; origin -> primersite [arrowhead=none]; primersite -> restrictionsite [arrowhead=none]; restrictionsite -> noverhang [arrowhead=none]; noverhang -> assembly [arrowhead=none]; origin [shape=circle width=0.2 label=""]; primersite [shape=primersite label="primer site" labelloc="b"]; restrictionsite [shape=restrictionsite label="restriction site" labelloc="b"]; noverhang [shape=noverhang label=""]; assembly [shape=assembly label=""]; }
digraph G { rankdir = LR; fivepoverhang -> signature [arrowhead=none]; signature -> threepoverhang [arrowhead=none]; fivepoverhang [shape=fivepoverhang label=""]; signature [shape=signature]; threepoverhang [shape=threepoverhang label=""]; }
Download:
Download from the official Graphviz site
All the development snapshots newer than 2.29.20120924 should have SBOLv compliant symbols, as well as the non-SBOLv circuit symbols (lpromoter, rarrow, etc.).
Example Diagrams:
digraph a { rankdir=LR; subgraph cluster0 { color=gray; style=filled; node [style=filled fillcolor=white]; a -> b [arrowhead=none]; b -> c [arrowhead=none]; } a [shape=promoter label=""]; b [shape=cds label="rtTA"]; c [shape=terminator label=""]; Dox -> rtTA; b -> rtTA; subgraph cluster1 { color=gray; style=filled; node [style=filled fillcolor=white]; d -> e [arrowhead=none]; e -> f [arrowhead=none]; } d [shape=promoter label=""]; e [shape=cds label="Alfa"]; f [shape=terminator label=""]; rtTA -> d; e -> Alfa; subgraph cluster2 { color=gray; style=filled; node [style=filled fillcolor=white]; g -> h [arrowhead=none]; h -> i [arrowhead=none]; } g [shape=promoter label=""]; h [shape=cds label="Alfa"]; i [shape=terminator label=""]; Alfa -> g; h -> Alfa; }
digraph G { rankdir=LR; subgraph cluster0 { color=gray; style=filled; node [style=filled fillcolor=white]; a -> b [arrowhead=none]; b -> c [arrowhead=none]; c -> d [arrowhead=none]; } a [shape=promoter label=""]; b [shape=cds label="rtTA"]; c [shape=cds label="LacI"]; d [shape=terminator label=""]; Dox -> rtTA; b -> rtTA; subgraph cluster1 { color=gray; style=filled; node [style=filled fillcolor=white]; e -> f [arrowhead=none]; f -> g [arrowhead=none]; g -> h [arrowhead=none]; } e [shape=promoter label=""]; f [shape=cds label="Charlie"]; g [shape=cds label="Alfa"]; h [shape=terminator label=""]; rtTA -> e; c -> LacI; IPTG -> LacI [arrowhead=tee]; subgraph cluster2 { color=gray; style=filled; node [style=filled fillcolor=white]; i -> j [arrowhead=none]; j -> k [arrowhead=none]; k -> l [arrowhead=none]; } i [shape=promoter label=""]; j [shape=cds label="India"]; k [shape=cds label="Bravo"]; l [shape=terminator label=""]; LacI -> i [arrowhead=tee]; f -> Charlie; g -> Alfa; j -> India; k -> Bravo; subgraph cluster3 { color=gray; style=filled; node [style=filled fillcolor=white]; m -> n [arrowhead=none]; n -> o [arrowhead=none]; o -> p [arrowhead=none]; } m [shape=promoter label=""]; n [shape=cds label="Charlie"]; o [shape=cds label="Alfa"]; p [shape=terminator label=""]; n -> Charlie; o -> Alfa; Alfa -> m; subgraph cluster4 { color=gray; style=filled; node [style=filled fillcolor=white]; q -> r [arrowhead=none]; r -> s [arrowhead=none]; s -> t [arrowhead=none]; t -> u [arrowhead=none]; } q [shape=promoter label=""]; r [shape=cds label="India"]; s [shape=cds label="Bravo"]; t [shape=cds label="EYFP"]; u [shape=terminator label=""]; r -> India; s -> Bravo; t -> EYFP; subgraph cluster5 { color=gray; style=filled; node [style=filled fillcolor=white]; v -> w [arrowhead=none]; w -> x [arrowhead=none]; } v [shape=promoter label=""]; w [shape=cds label="Hotel"]; x [shape=terminator label=""]; Charlie -> v [arrowhead=tee]; w -> Hotel; subgraph cluster6 { color=gray; style=filled; node [style=filled fillcolor=white]; y -> z [arrowhead=none]; z -> aa [arrowhead=none]; } y [shape=promoter label=""]; z [shape=cds label="Foxtrot"]; aa [shape=terminator label=""]; Hotel -> y [arrowhead=tee]; India -> y [arrowhead=tee]; z -> Foxtrot; subgraph cluster7 { color=gray; style=filled; node [style=filled fillcolor=white]; bb -> cc [arrowhead=none]; cc -> dd [arrowhead=none]; dd -> ee [arrowhead=none]; } bb [shape=promoter label=""]; cc [shape=cds label="EBFP2"]; dd [shape=cds label="Foxtrot"]; ee [shape=terminator label=""]; Foxtrot -> bb; dd -> Foxtrot; cc -> EBFP2; }
Caveats:
Color and labelling doesn’t work as nicely as the non-SBOLv symbols.
Labels that include a double-stranded DNA line, such as the promoter, has to have labelloc set to “b”. This is to avoid the intersection of the label and the double-stranded DNA line, since labels are automatically placed in the center of the nodes.
Hef1a [shape=promoter];
Hef1a [shape=promoter labelloc="b"];
Also, for the aforementioned shapes, colorfill has to be specified instead of color. color will color the outline of the node shape, potentially causing non-consistent colorations of the double-stranded DNA line between connected nodes.
Hef1a [shape=promoter labelloc="b" style=filled colorscheme=greens3 color=3];
Hef1a [shape=promoter labelloc="b" style=filled colorscheme=greens3 fillcolor=3];
Acknowledgements:
Thanks to Reshma Shetty and Jake Beal for the inspiration.
Pingback: Graphviz 2.29 + SBOLv 1.0 - Easy Drawing of promoter->gene->terminator Diagrams