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.

1 comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: