Given various tell-tale signs, that graph was almost certainly generated with GraphViz. GraphViz is free, so you can produce similar diagrams yourself by downloading and installing it, or by using an online editor. If you want to mimic the style in the diagram you posted, start with a template that looks like this:
digraph chess_openings {
{
node [shape=point];
}
{
node [shape=box];
}
}
which creates two groups of nodes: one for positions, which will be shown as points, and one for moves, which will be shown as boxes.
For each of white's moves, you'll have to write code that looks something like this in the second group:
p0 -> p0_1e4 [label="Sicilian"]; p0_1e4 [label="1. e4"]; p0_1e4 -> p1;
which says that "from Position #0 (p0
), white can play the Sicilian by moving "1. e4", which will result in Position #1 (p1
)". Similarly, for black's moves, you'll have to write code that looks like this:
p1 -> p1_1c5 [label="Sicilian"]; p1_1c5 [label="1. … c5", style=filled]; p1_1c5 -> p2;
which says that "from Position #1, black can play the Sicilian by moving "1. … c5", which will result in Position #2". If you have a live preview running, the position numbers will be visible in the diagram as you write the moves. When you're ready to hide a position, add it to a list in the first group:
p0, p1, p2;
Below is a transcription of the graph in your question. You can play with the code here.
digraph chess_openings {
{
node [shape=point];
p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42;
}
{
node [shape=box];
p0 -> p0_1e4 [label="Sicilian"]; p0_1e4 [label="1. e4"]; p0_1e4 -> p1;
p1 -> p1_1c5 [label="Sicilian"]; p1_1c5 [label="1. … c5", style=filled]; p1_1c5 -> p2;
p2 -> p2_2Nf3 [label="Open Sicilian"]; p2_2Nf3 [label="2. Nf3"]; p2_2Nf3 -> p3;
p3 -> p3_2d6 [label="Mainline"]; p3_2d6 [label="2. … d6", style=filled]; p3_2d6 -> p4;
p4 -> p4_3d4 [label="Mainline"]; p4_3d4 [label="3. d4"]; p4_3d4 -> p5;
p5 -> p5_3cxd4 [label="Mainline"]; p5_3cxd4 [label="3. … cxd4", style=filled]; p5_3cxd4 -> p6;
p6 -> p6_4Nxd4 [label="Mainline"]; p6_4Nxd4 [label="4. Nxd4"]; p6_4Nxd4 -> p7;
p7 -> p7_4Nf6 [label="Mainline"]; p7_4Nf6 [label="4. … Nf6", style=filled]; p7_4Nf6 -> p8;
p8 -> p8_5Nc3 [label="Mainline"]; p8_5Nc3 [label="5. Nc3"]; p8_5Nc3 -> p9;
p9 -> p9_5e6 [label="Scheveningen"]; p9_5e6 [label="5. … e6", style=filled]; p9_5e6 -> p10;
p10 -> p10_6Be2 [label="Scheveningen"]; p10_6Be2 [label="6. Be2"]; p10_6Be2 -> p11;
p11 -> p11_6a6 [label="Scheveningen"]; p11_6a6 [label="6. … a6", style=filled]; p11_6a6 -> p12;
p9 -> p9_5a6 [label="Najdorf"]; p9_5a6 [label="5. … a6", style=filled]; p9_5a6 -> p13;
p13 -> p13_6Be2 [label="Najdorf"]; p13_6Be2 [label="6. Be2"]; p13_6Be2 -> p14;
p14 -> p14_6e6 [label="Najdorf → Scheveningen"]; p14_6e6 [label="6. … e6", style=filled]; p14_6e6 -> p12;
p9 -> p9_5g6 [label="Dragon"]; p9_5g6 [label="5. … g6", style=filled]; p9_5g6 -> p15;
p15 -> p15_6Be3 [label="Yugoslav"]; p15_6Be3 [label="6. Be3"]; p15_6Be3 -> p16;
p15 -> p15_6Be2 [label="Dragon"]; p15_6Be2 [label="6. Be2"]; p15_6Be2 -> p17;
p9 -> p9_5Nc6 [label="Classical"]; p9_5Nc6 [label="5. … Nc6", style=filled]; p9_5Nc6 -> p18;
p18 -> p18_6Be2 [label="Classical"]; p18_6Be2 [label="6. Be2"]; p18_6Be2 -> p19;
p3 -> p3_2Nc6 [label="Kalashnikov"]; p3_2Nc6 [label="2. … Nc6", style=filled]; p3_2Nc6 -> p20;
p20 -> p20_3d4 [label="Kalashnikov"]; p20_3d4 [label="3. d4"]; p20_3d4 -> p21;
p21 -> p21_3cxd4 [label="Kalashnikov"]; p21_3cxd4 [label="3. … cxd4", style=filled]; p21_3cxd4 -> p22;
p22 -> p22_4Nxd4 [label="Kalashnikov"]; p22_4Nxd4 [label="4. Nxd4"]; p22_4Nxd4 -> p23;
p23 -> p23_4g6 [label="Sveshnikov → Accelerated Dragon"]; p23_4g6 [label="4. … g6", style=filled]; p23_4g6 -> p24;
p24 -> p24_5Nc3 [label="Accelerated Dragon"]; p24_5Nc3 [label="5. Nc3"]; p24_5Nc3 -> p25;
p25 -> p25_5Bg7 [label="Accelerated Dragon"]; p25_5Bg7 [label="5. … Bg7", style=filled]; p25_5Bg7 -> p26;
p26 -> p26_6Be3 [label="Accelerated Dragon"]; p26_6Be3 [label="6. Be3"]; p26_6Be3 -> p27;
p23 -> p23_4e5 [label="Kalashnikov"]; p23_4e5 [label="4. … e5", style=filled]; p23_4e5 -> p28;
p23 -> p23_4Nf6 [label="Sveshnikov"]; p23_4Nf6 [label="4. … Nf6", style=filled]; p23_4Nf6 -> p29;
p29 -> p29_5Nc3 [label="Sveshnikov"]; p29_5Nc3 [label="5. Nc3"]; p29_5Nc3 -> p30;
p30 -> p30_5d6 [label="Sveshnikov → Classic"]; p30_5d6 [label="5. … d6", style=filled]; p30_5d6 -> p18;
p30 -> p30_5e6 [label="Sveshnikov → Four Knights"]; p30_5e6 [label="5. … e6", style=filled]; p30_5e6 -> p31;
p23 -> p23_4e6 [label="Sveshnikov → Taimanov"]; p23_4e6 [label="4. … e6", style=filled]; p23_4e6 -> p32;
p32 -> p32_5Nc3 [label="Taimanov"]; p32_5Nc3 [label="5. Nc3"]; p32_5Nc3 -> p33;
p33 -> p33_5Nf6 [label="Taimanov → Four Knights"]; p33_5Nf6 [label="5. … Nf6", style=filled]; p33_5Nf6 -> p31;
p33 -> p33_5a6 [label="Taimanov"]; p33_5a6 [label="5. … a6", style=filled]; p33_5a6 -> p34;
p3 -> p3_2e6 [label="Four Knights"]; p3_2e6 [label="2. … e6", style=filled]; p3_2e6 -> p35;
p35 -> p35_3d4 [label="Four Knights"]; p35_3d4 [label="3. d4"]; p35_3d4 -> p36;
p36 -> p36_3cxd4 [label="Four Knights"]; p36_3cxd4 [label="3. … cxd4", style=filled]; p36_3cxd4 -> p37;
p37 -> p37_4Nxd4 [label="Four Knights"]; p37_4Nxd4 [label="4. Nxd4"]; p37_4Nxd4 -> p38;
p38 -> p38_4Nf6 [label="Four Knights"]; p38_4Nf6 [label="4. … Nf6", style=filled]; p38_4Nf6 -> p39;
p39 -> p39_5Nc3 [label="Four Knights"]; p39_5Nc3 [label="5. Nc3"]; p39_5Nc3 -> p40;
p40 -> p40_5Nc6 [label="Four Knights"]; p40_5Nc6 [label="5. … Nc6", style=filled]; p40_5Nc6 -> p31;
p38 -> p38_4Nc6 [label="Taimanov"]; p38_4Nc6 [label="4. … Nc6", style=filled]; p38_4Nc6 -> p32;
p38 -> p38_4a6 [label="Kan"]; p38_4a6 [label="4. … a6", style=filled]; p38_4a6 -> p41;
p41 -> p41_5Nc3 [label="Kan"]; p41_5Nc3 [label="5. Nc3"]; p41_5Nc3 -> p42;
p42 -> p42_5Nc6 [label="Kan → Taimanov"]; p42_5Nc6 [label="5. … Nc6", style=filled]; p42_5Nc6 -> p34;
}
}
This is what the output looks like:
