Green and red arrows indicate the true and false branches of an if or similar structures.
Blue
Blue arrows indicate non-conditional transitions.
These can be gotos, or more frequently branches merging after a condition.
Arrow Thickness
Thicker arrow indicate backlinks - going to an earlier line in the code.
Those are most commonly seen in loops.
Block Types
Basic
The basic block contains any number of "basic" lines.
Those can be anything from function-calls to variable assignments.
Since they don't affect control flow, they are not indicated directly in the graph.
The taller a block is - the more lines it has in it.
Entry & Exit (Return)
The function entry is marked with a green inverted-house block and all exits are marked with red house blocks.
Yield
yield nodes are marked using hexagons.
Throw and Raise
throw and raise nodes are marked using triangles.
Clusters
Clusters are used to describe constructs that cannot be cleanly represented in a pure-graph.
Context Managers
Context-managers, such as Python's with statement, have a simple cluster with a single background color.
When nested, they'll have a small border added as well for separation.
Exception Handling
Exceptions have somewhat complex clusters.
The entire try-except-else-finally clause is surrounded by a blue cluster, indicating the context;
the try block is placed in a green cluster;
all except or catch blocks are given red clusters;
the else block, if present, is give no additional cluster;
finally blocks are given yellow clusters.
finally blocks are replicated for every flow that requires them.
This usually means return statements inside the try or except blocks.