Distruct a program for the graphical display of population ... · Distruct: a program for the...

21
Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational Medicine and Biology Department of Human Genetics University of Michigan 100 Washtenaw Ave Ann Arbor MI 48109, USA The distruct software 2 is available at http://rosenberglab.bioinformatics.med.umich.edu/distruct.html June 27, 2007 1 Comments can be emailed to me at [email protected]. 2 This manual is the companion to version 1.1 of the software.

Transcript of Distruct a program for the graphical display of population ... · Distruct: a program for the...

Page 1: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Distruct:a program for the graphical display of population structure

Noah A. Rosenberg 1

Center for Computational Medicine and BiologyDepartment of Human Genetics

University of Michigan100 Washtenaw Ave

Ann Arbor MI 48109, USA

The distruct software2 is available at

http://rosenberglab.bioinformatics.med.umich.edu/distruct.html

June 27, 2007

1Comments can be emailed to me at [email protected] manual is the companion to version 1.1 of the software.

Page 2: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Contents

1 Introduction 11.1 Availability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Basic overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Input files 22.1 Population Q-matrix file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 Individual Q-matrix file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.3 Labels below the figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.4 Labels atop the figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.5 Vertical cluster order and cluster colors . . . . . . . . . . . . . . . . . . . . . . . 42.6 Formatting errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3 Usage options 143.1 Data settings and main options . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2 Figure appearance and additional options . . . . . . . . . . . . . . . . . . . . . . 153.3 Command-line arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Examples 17

5 Frequently asked questions 19

References 20

1 Introduction

The clustering software structure (Pritchard et al., 2000a; Falush et al., 2003) provides aniterative algorithm that places individuals into K clusters. K is a parameter that is chosen inadvance, but that can be varied in independent structure runs. Individuals are given “mem-bership coefficients” for each cluster, such that the estimated membership coefficients of anindividual sum to 1 across the K clusters. The matrix of membership coefficients, where thenumber of individuals is the number of rows and K is the number of columns, is referred to hereas the individual Q-matrix. For each population, membership coefficients for each cluster canbe averaged across individuals to create a population Q-matrix.

A convenient way to display structure results is to show each individual as a line segment.This segment is partitioned into K colored components, which represent the individual’s esti-mated membership coefficients in the K clusters. The program distruct provides a variety ofoptions for creating figures based on this general idea.

It is possible to make distruct figures without having used structure to generate the individualQ-matrix and the population Q-matrix; if other programs are used, the output from thoseprograms must simply be formatted to match the distruct input. For the remainder of themanual, I assume that structure was in fact used to generate the input for distruct.

1

Page 3: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

1.1 Availability

The distruct program was first used to generate Figures 1 and 2 in Rosenberg et al. (2002). Thewebsite for distruct is http://rosenberglab.bioinformatics.med.umich.edu/distruct.html.When using distruct, please cite:

N. A. Rosenberg (2004). Distruct: a program for the graphical display of population structure. Molec-

ular Ecology Notes 4: 137-138.

The structure software is available at http://pritch.bsd.uchicago.edu. Some familiaritywith structure is assumed in this document. Users of structure and distruct may also be interestedin CLUMPP, available at http://rosenberglab.bioinformatics.med.umich.edu/clumpp.html.

1.2 Basic overview

The distruct program is written in C, and compiled versions are available for Linux, MacOSX,and Windows. It reads data files based on output from structure. It allows additional optionalfiles that permit the user to control the left-to-right order in which populations are displayed,the labels printed atop and/or below the figure, the bottom-to-top order of clusters, and thecolors used. Output is printed in PostScript format, and the figure produced can be displayedusing such programs as GhostView. If the figure is unsatisfactory, changes can often be madedirectly to the PostScript code without having to rerun distruct (indeed, a look at the PostScriptcan often help if the program does not seem to be doing what you want it to do).

Program settings are specified in the file drawparams, although some can be given withcommand-line arguments. Variables in all-capitals in this document are used in drawparams.

2 Input files

The data to be plotted are specified in ASCII text-formatted files derived from structure output.To allow for ongoing changes in the structure code, the structure output file itself is not used.Instead, the program takes a file with the population Q-matrix (required), and a separate filewith the individual Q-matrix (optional), both printed in the format of the structure output.From structure output files, these files are easily produced, for example, by cutting and pasting.

The example input file used in this document is modified from the K = 5 graph shown forpopulations of Central/South Asia in Figure 2 of Rosenberg et al. (2002). Along with thedistruct code, the distruct package contains seven files related to this data set, as well as the filedrawparams. The file casia f is an output file from structure. The file casia.ps is the output ofdistruct when applied to data and settings in the other five files, which appear in Tables 1-5. Avariety of color schemes for distruct plots are available in the ColorBrewer directory.

2.1 Population Q-matrix file

If NUMPOPS is the number of predefined populations and K is the number of clusters, dis-truct expects a file with NUMPOPS rows and K + 2 columns per row. This file is stored inINFILE POPQ. Blank lines and extra whitespace are tolerated. In the example in Table 1,NUMPOPS=9 and K = 5. In Table 1, each row represents results for one population. The first

2

Page 4: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Table 1: Population Q-matrix (casia.popq).

50: 0.646 0.276 0.060 0.012 0.007 25

51: 0.900 0.062 0.018 0.011 0.009 2552: 0.024 0.065 0.874 0.023 0.014 2554: 0.058 0.133 0.139 0.661 0.009 2556: 0.022 0.024 0.012 0.004 0.938 2557: 0.572 0.337 0.064 0.013 0.015 2558: 0.156 0.574 0.183 0.059 0.027 2559: 0.234 0.585 0.143 0.021 0.016 25

629: 0.053 0.147 0.282 0.493 0.025 10

Table 2: Individual Q-matrix (casia.indivq).

1 1297 (3) 629 : 0.173 0.194 0.014 0.499 0.1212 1298 (4) 629 : 0.077 0.048 0.377 0.497 0.0023 1299 (4) 629 : 0.007 0.008 0.571 0.398 0.0164 1300 (2) 629 : 0.076 0.453 0.018 0.442 0.0105 1301 (4) 629 : 0.016 0.046 0.511 0.400 0.027...

206 203 (3) 59 : 0.005 0.977 0.006 0.004 0.008207 205 (2) 59 : 0.263 0.616 0.038 0.004 0.078208 206 (13) 59 : 0.218 0.654 0.016 0.054 0.058209 208 (2) 59 : 0.499 0.025 0.424 0.029 0.023210 210 (3) 59 : 0.050 0.877 0.017 0.014 0.041

column is an integer that gives a code number for the population and is followed by a colon.The next K columns are membership coefficients for clusters 1, 2, ..., K (real numbers in [0,1]).Ideally the numbers in these K columns sum to 1; in case they do not, the program normalizesthem by their sum. The final column gives the sample size for the population (an integer).

While most applications will probably show the individual Q-matrix, some applications mightwish to show only the population Q-matrix (for example, Table 2 of Wilson et al. (2001)). Thus,if PRINT INDIVS is set to zero, distruct will display only the population Q-matrix.

2.2 Individual Q-matrix file

If NUMINDS is the number of individuals and PRINT INDIVS is set to 1, distruct expects a filewith NUMINDS rows and at least K+6 columns per row. This file is stored in INFILE INDIVQ.Blank lines and extra whitespace are tolerated. Also, some options of structure print additionalcolumns for confidence intervals; these columns are ignored. In the example shown in Table 2,NUMINDS=210. Each row shows the membership coefficients for one individual. Column 2gives a code number for the individual. Column 4 gives the code number for the populationto which the individual belongs. Columns 1, 3, and 5 are ignored. Columns 6 to K + 5 showmembership coefficients for clusters 1, 2, ..., K. Ideally the numbers in these K columns sumto 1; in case they do not, the program normalizes them by their sum.

Individuals are automatically grouped by population, with the left-to-right order of indi-viduals in the figure being the same as the top-to-bottom order of individuals in the input file.Examples that show the individual Q-matrix are in Figures 1 and 2 of Rosenberg et al. (2002).

3

Page 5: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Table 3: Labels below the figure(casia.names).

50 Balochi

51 Brahui

57 Makrani

59 Sindhi

58 Pathan

52 Burusho

54 Hazara

629 Uygur

699 Yakut

56 Kalash

Table 4: Labels atop the figure(casia.languages).

50 Indo-European

51 Dravidian

57 Indo-European

59 Indo-European

58 Indo-European

52 Linguistic isolate

54 Indo-European

629 Altaic

699 Altaic

56 Indo-European

2.3 Labels below the figure

To place labels below the figure, set PRINT LABEL BELOW to 1. The program will search forthe file specified by INFILE LABEL BELOW. The default is to print the population codes aslabels. If the file is found, the input order of populations on the rows of the file will be used forthe left-right order of graphing of populations. The first column contains the population code(an integer); the remaining columns contain the text that is to be printed below the figure.

Note that additional populations not found in the data can be included in the file. Theseadditional lines will simply be ignored.

2.4 Labels atop the figure

Labels atop the figure are placed analogously to those below it using PRINT LABEL ATOP=1.The program will search for the file specified by INFILE LABEL ATOP. The default is to printthe population codes as labels. If the file is found, the input order of populations on the rows ofthe file will be used for the left-right order of graphing of populations. If labels are requested bothatop and below the figure, the entries in INFILE LABEL ATOP and INFILE LABEL BELOWshould be listed in the same order. The first column contains the population code (an integer);the remaining columns contain the text that is to be printed atop the figure. As with the labelsbelow the figure, this text can consist of multiple columns.

2.5 Vertical cluster order and cluster colors

The permutation that describes the vertical order of the clusters can be given in the file specifiedINFILE CLUST PERM. The colors to be used for the figure are also specified here. If no fileis detected, the left-to-right order of the clusters in INFILE POPQ is used. The names of someof the allowed colors are shown in Figure 1. Colors may vary considerably across printers. Thefirst column of the file must contain a permutation of the integers in {1, 2...K}. The entries inthe second column must be colors taken from the (case-insensitive) allowed list.

The maximum number of clusters is set at 60, and if no INFILE CLUST PERM file isspecified, then the colors for the clusters will be taken in order from the top two rows of Figure1. If GRAYSCALE is set to 1, real numbers in [0,1] are entered in place of the names of colors.In this scheme, 0 corresponds to black and 1 corresponds to white.

4

Page 6: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

oran

ge

1

blue

2

yello

w3

pink

4

gree

n5

purp

le

6

red

7

light

_gre

en

8

dark

_blu

e

9

light

_pur

ple

10

light

_yel

low

11

brow

n

12

light

_blu

e

13

oliv

e_gr

een

14

peac

h

15

sea_

gree

n

16

yello

w_g

reen

17

blue

_pur

ple

18

blue

_gre

en

19

gray

20

dark

_gre

en

21

light

_gra

y

22

red2

23

light

_blu

e2

24

light

_ora

nge

25

dark

_gra

y

26

light

_pin

k

27

dark

_bro

wn

28

dark

_ora

nge

29

dark

_pur

ple

30

whi

te

31

colo

r32

32

colo

r33

33

colo

r34

34

colo

r35

35

colo

r36

36

colo

r37

37

colo

r38

38

colo

r39

39

colo

r40

40

colo

r41

41

colo

r42

42

colo

r43

43

colo

r44

44

colo

r45

45

colo

r46

46

colo

r47

47

colo

r48

48

colo

r49

49

colo

r50

50

colo

r51

51

colo

r52

52

colo

r53

53

colo

r54

54

colo

r55

55

colo

r56

56

colo

r57

57

colo

r58

58

colo

r59

59

colo

r60

60

colo

r101

colo

r102

colo

r103

colo

r104

colo

r105

colo

r106

colo

r107

colo

r108

colo

r109

colo

r110

colo

r111

colo

r112

colo

r113

colo

r114

colo

r115

colo

r116

colo

r117

colo

r118

colo

r119

colo

r120

colo

r121

colo

r122

colo

r123

colo

r124

colo

r125

colo

r126

colo

r127

colo

r128

colo

r129

colo

r130

Figure 1: List of colors recognized by distruct. In the top two rows, the number below thefigure represents the cluster for which the color will be used as the default. The label atopthe figure is the string that is recognized as the color name. The string “black” is also recog-nized. The bottom row represents a stepped-sequential color scheme adapted from the schemeat http://geography.uoregon.edu/datagraphics/color scales.htm.

Table 5: Permutation of the clusters, and colors (casia.perm).

5 yellOw

4 Pink

1 Red

2 green

3 blue Purple

The distruct program also recognizes color schemes implemented in ColorBrewer (Brewer

et al., 2003; Harrower and Brewer, 2003). These color schemes, which contain 3-12 colors,are shown in Figures 2-9. A distruct figure can be produced using a particular ColorBrewer colorscheme, or a color scheme can be created from a combination of the colors shown in Figures 1-9.ColorBrewer schemes are of three types — qualitative (Figures 2 and 3), diverging (Figures 4 and5), and sequential (Figures 6-9). Qualitative schemes are likely to be best-suited to most depic-tions of population structure. As an example, to use the ColorBrewer color scheme Accent 5 qualinstead of the scheme in casia.perm, replace casia.perm with ColorBrewer/Accent 5 qual for thevalue of INFILE CLUST PERM in the drawparams file. The rows in Accent 5 qual can berearranged to produce the same bottom-to-top cluster order as in casia.perm.

The ColorBrewer website (http://colorbrewer.org) provides additional information abouteach of its schemes, including their suitability for colorblind viewers. A simulator for colorblindviewers is located at (http://vischeck.com).

5

Page 7: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Acc

ent_

3_qu

al_1

Acc

ent_

3_qu

al_2

Acc

ent_

3_qu

al_3

Dar

k2_3

_qua

l_1

Dar

k2_3

_qua

l_2

Dar

k2_3

_qua

l_3

Paire

d_3_

qual

_1Pa

ired_

3_qu

al_2

Paire

d_3_

qual

_3

Past

el1_

3_qu

al_1

Past

el1_

3_qu

al_2

Past

el1_

3_qu

al_3

Past

el2_

3_qu

al_1

Past

el2_

3_qu

al_2

Past

el2_

3_qu

al_3

Set1

_3_q

ual_

1Se

t1_3

_qua

l_2

Set1

_3_q

ual_

3

Set2

_3_q

ual_

1Se

t2_3

_qua

l_2

Set2

_3_q

ual_

3

Set3

_3_q

ual_

1Se

t3_3

_qua

l_2

Set3

_3_q

ual_

3

Acc

ent_

4_qu

al_1

Acc

ent_

4_qu

al_2

Acc

ent_

4_qu

al_3

Acc

ent_

4_qu

al_4

Dar

k2_4

_qua

l_1

Dar

k2_4

_qua

l_2

Dar

k2_4

_qua

l_3

Dar

k2_4

_qua

l_4

Paire

d_4_

qual

_1Pa

ired_

4_qu

al_2

Paire

d_4_

qual

_3Pa

ired_

4_qu

al_4

Past

el1_

4_qu

al_1

Past

el1_

4_qu

al_2

Past

el1_

4_qu

al_3

Past

el1_

4_qu

al_4

Past

el2_

4_qu

al_1

Past

el2_

4_qu

al_2

Past

el2_

4_qu

al_3

Past

el2_

4_qu

al_4

Set1

_4_q

ual_

1Se

t1_4

_qua

l_2

Set1

_4_q

ual_

3Se

t1_4

_qua

l_4

Set2

_4_q

ual_

1Se

t2_4

_qua

l_2

Set2

_4_q

ual_

3Se

t2_4

_qua

l_4

Set3

_4_q

ual_

1Se

t3_4

_qua

l_2

Set3

_4_q

ual_

3Se

t3_4

_qua

l_4

Acc

ent_

5_qu

al_1

Acc

ent_

5_qu

al_2

Acc

ent_

5_qu

al_3

Acc

ent_

5_qu

al_4

Acc

ent_

5_qu

al_5

Dar

k2_5

_qua

l_1

Dar

k2_5

_qua

l_2

Dar

k2_5

_qua

l_3

Dar

k2_5

_qua

l_4

Dar

k2_5

_qua

l_5

Paire

d_5_

qual

_1Pa

ired_

5_qu

al_2

Paire

d_5_

qual

_3Pa

ired_

5_qu

al_4

Paire

d_5_

qual

_5

Past

el1_

5_qu

al_1

Past

el1_

5_qu

al_2

Past

el1_

5_qu

al_3

Past

el1_

5_qu

al_4

Past

el1_

5_qu

al_5

Past

el2_

5_qu

al_1

Past

el2_

5_qu

al_2

Past

el2_

5_qu

al_3

Past

el2_

5_qu

al_4

Past

el2_

5_qu

al_5

Set1

_5_q

ual_

1Se

t1_5

_qua

l_2

Set1

_5_q

ual_

3Se

t1_5

_qua

l_4

Set1

_5_q

ual_

5

Set2

_5_q

ual_

1Se

t2_5

_qua

l_2

Set2

_5_q

ual_

3Se

t2_5

_qua

l_4

Set2

_5_q

ual_

5

Set3

_5_q

ual_

1Se

t3_5

_qua

l_2

Set3

_5_q

ual_

3Se

t3_5

_qua

l_4

Set3

_5_q

ual_

5

Acc

ent_

6_qu

al_1

Acc

ent_

6_qu

al_2

Acc

ent_

6_qu

al_3

Acc

ent_

6_qu

al_4

Acc

ent_

6_qu

al_5

Acc

ent_

6_qu

al_6

Dar

k2_6

_qua

l_1

Dar

k2_6

_qua

l_2

Dar

k2_6

_qua

l_3

Dar

k2_6

_qua

l_4

Dar

k2_6

_qua

l_5

Dar

k2_6

_qua

l_6

Paire

d_6_

qual

_1Pa

ired_

6_qu

al_2

Paire

d_6_

qual

_3Pa

ired_

6_qu

al_4

Paire

d_6_

qual

_5Pa

ired_

6_qu

al_6

Past

el1_

6_qu

al_1

Past

el1_

6_qu

al_2

Past

el1_

6_qu

al_3

Past

el1_

6_qu

al_4

Past

el1_

6_qu

al_5

Past

el1_

6_qu

al_6

Past

el2_

6_qu

al_1

Past

el2_

6_qu

al_2

Past

el2_

6_qu

al_3

Past

el2_

6_qu

al_4

Past

el2_

6_qu

al_5

Past

el2_

6_qu

al_6

Set1

_6_q

ual_

1Se

t1_6

_qua

l_2

Set1

_6_q

ual_

3Se

t1_6

_qua

l_4

Set1

_6_q

ual_

5Se

t1_6

_qua

l_6

Set2

_6_q

ual_

1Se

t2_6

_qua

l_2

Set2

_6_q

ual_

3Se

t2_6

_qua

l_4

Set2

_6_q

ual_

5Se

t2_6

_qua

l_6

Set3

_6_q

ual_

1Se

t3_6

_qua

l_2

Set3

_6_q

ual_

3Se

t3_6

_qua

l_4

Set3

_6_q

ual_

5Se

t3_6

_qua

l_6

Acc

ent_

7_qu

al_1

Acc

ent_

7_qu

al_2

Acc

ent_

7_qu

al_3

Acc

ent_

7_qu

al_4

Acc

ent_

7_qu

al_5

Acc

ent_

7_qu

al_6

Acc

ent_

7_qu

al_7

Dar

k2_7

_qua

l_1

Dar

k2_7

_qua

l_2

Dar

k2_7

_qua

l_3

Dar

k2_7

_qua

l_4

Dar

k2_7

_qua

l_5

Dar

k2_7

_qua

l_6

Dar

k2_7

_qua

l_7

Paire

d_7_

qual

_1Pa

ired_

7_qu

al_2

Paire

d_7_

qual

_3Pa

ired_

7_qu

al_4

Paire

d_7_

qual

_5Pa

ired_

7_qu

al_6

Paire

d_7_

qual

_7

Past

el1_

7_qu

al_1

Past

el1_

7_qu

al_2

Past

el1_

7_qu

al_3

Past

el1_

7_qu

al_4

Past

el1_

7_qu

al_5

Past

el1_

7_qu

al_6

Past

el1_

7_qu

al_7

Past

el2_

7_qu

al_1

Past

el2_

7_qu

al_2

Past

el2_

7_qu

al_3

Past

el2_

7_qu

al_4

Past

el2_

7_qu

al_5

Past

el2_

7_qu

al_6

Past

el2_

7_qu

al_7

Set1

_7_q

ual_

1Se

t1_7

_qua

l_2

Set1

_7_q

ual_

3Se

t1_7

_qua

l_4

Set1

_7_q

ual_

5Se

t1_7

_qua

l_6

Set1

_7_q

ual_

7

Set2

_7_q

ual_

1Se

t2_7

_qua

l_2

Set2

_7_q

ual_

3Se

t2_7

_qua

l_4

Set2

_7_q

ual_

5Se

t2_7

_qua

l_6

Set2

_7_q

ual_

7

Set3

_7_q

ual_

1Se

t3_7

_qua

l_2

Set3

_7_q

ual_

3Se

t3_7

_qua

l_4

Set3

_7_q

ual_

5Se

t3_7

_qua

l_6

Set3

_7_q

ual_

7

Acc

ent_

8_qu

al_1

Acc

ent_

8_qu

al_2

Acc

ent_

8_qu

al_3

Acc

ent_

8_qu

al_4

Acc

ent_

8_qu

al_5

Acc

ent_

8_qu

al_6

Acc

ent_

8_qu

al_7

Acc

ent_

8_qu

al_8

Dar

k2_8

_qua

l_1

Dar

k2_8

_qua

l_2

Dar

k2_8

_qua

l_3

Dar

k2_8

_qua

l_4

Dar

k2_8

_qua

l_5

Dar

k2_8

_qua

l_6

Dar

k2_8

_qua

l_7

Dar

k2_8

_qua

l_8

Paire

d_8_

qual

_1Pa

ired_

8_qu

al_2

Paire

d_8_

qual

_3Pa

ired_

8_qu

al_4

Paire

d_8_

qual

_5Pa

ired_

8_qu

al_6

Paire

d_8_

qual

_7Pa

ired_

8_qu

al_8

Past

el1_

8_qu

al_1

Past

el1_

8_qu

al_2

Past

el1_

8_qu

al_3

Past

el1_

8_qu

al_4

Past

el1_

8_qu

al_5

Past

el1_

8_qu

al_6

Past

el1_

8_qu

al_7

Past

el1_

8_qu

al_8

Past

el2_

8_qu

al_1

Past

el2_

8_qu

al_2

Past

el2_

8_qu

al_3

Past

el2_

8_qu

al_4

Past

el2_

8_qu

al_5

Past

el2_

8_qu

al_6

Past

el2_

8_qu

al_7

Past

el2_

8_qu

al_8

Set1

_8_q

ual_

1Se

t1_8

_qua

l_2

Set1

_8_q

ual_

3Se

t1_8

_qua

l_4

Set1

_8_q

ual_

5Se

t1_8

_qua

l_6

Set1

_8_q

ual_

7Se

t1_8

_qua

l_8

Set2

_8_q

ual_

1Se

t2_8

_qua

l_2

Set2

_8_q

ual_

3Se

t2_8

_qua

l_4

Set2

_8_q

ual_

5Se

t2_8

_qua

l_6

Set2

_8_q

ual_

7Se

t2_8

_qua

l_8

Set3

_8_q

ual_

1Se

t3_8

_qua

l_2

Set3

_8_q

ual_

3Se

t3_8

_qua

l_4

Set3

_8_q

ual_

5Se

t3_8

_qua

l_6

Set3

_8_q

ual_

7Se

t3_8

_qua

l_8

Figure 2: ColorBrewer qualitative color schemes with 3-8 colors. Each row of graphs representsa different family of color schemes, and each column represents a different number of colors.The labels below the graphs represent the color names recognized by distruct.

6

Page 8: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Paire

d_9_

qual

_1Pa

ired_

9_qu

al_2

Paire

d_9_

qual

_3Pa

ired_

9_qu

al_4

Paire

d_9_

qual

_5Pa

ired_

9_qu

al_6

Paire

d_9_

qual

_7Pa

ired_

9_qu

al_8

Paire

d_9_

qual

_9

Past

el1_

9_qu

al_1

Past

el1_

9_qu

al_2

Past

el1_

9_qu

al_3

Past

el1_

9_qu

al_4

Past

el1_

9_qu

al_5

Past

el1_

9_qu

al_6

Past

el1_

9_qu

al_7

Past

el1_

9_qu

al_8

Past

el1_

9_qu

al_9

Set1

_9_q

ual_

1Se

t1_9

_qua

l_2

Set1

_9_q

ual_

3Se

t1_9

_qua

l_4

Set1

_9_q

ual_

5Se

t1_9

_qua

l_6

Set1

_9_q

ual_

7Se

t1_9

_qua

l_8

Set1

_9_q

ual_

9

Set3

_9_q

ual_

1Se

t3_9

_qua

l_2

Set3

_9_q

ual_

3Se

t3_9

_qua

l_4

Set3

_9_q

ual_

5Se

t3_9

_qua

l_6

Set3

_9_q

ual_

7Se

t3_9

_qua

l_8

Set3

_9_q

ual_

9

Paire

d_10

_qua

l_1

Paire

d_10

_qua

l_2

Paire

d_10

_qua

l_3

Paire

d_10

_qua

l_4

Paire

d_10

_qua

l_5

Paire

d_10

_qua

l_6

Paire

d_10

_qua

l_7

Paire

d_10

_qua

l_8

Paire

d_10

_qua

l_9

Paire

d_10

_qua

l_10

Set3

_10_

qual

_1Se

t3_1

0_qu

al_2

Set3

_10_

qual

_3Se

t3_1

0_qu

al_4

Set3

_10_

qual

_5Se

t3_1

0_qu

al_6

Set3

_10_

qual

_7Se

t3_1

0_qu

al_8

Set3

_10_

qual

_9Se

t3_1

0_qu

al_1

0

Paire

d_11

_qua

l_1

Paire

d_11

_qua

l_2

Paire

d_11

_qua

l_3

Paire

d_11

_qua

l_4

Paire

d_11

_qua

l_5

Paire

d_11

_qua

l_6

Paire

d_11

_qua

l_7

Paire

d_11

_qua

l_8

Paire

d_11

_qua

l_9

Paire

d_11

_qua

l_10

Paire

d_11

_qua

l_11

Set3

_11_

qual

_1Se

t3_1

1_qu

al_2

Set3

_11_

qual

_3Se

t3_1

1_qu

al_4

Set3

_11_

qual

_5Se

t3_1

1_qu

al_6

Set3

_11_

qual

_7Se

t3_1

1_qu

al_8

Set3

_11_

qual

_9Se

t3_1

1_qu

al_1

0Se

t3_1

1_qu

al_1

1

Paire

d_12

_qua

l_1

Paire

d_12

_qua

l_2

Paire

d_12

_qua

l_3

Paire

d_12

_qua

l_4

Paire

d_12

_qua

l_5

Paire

d_12

_qua

l_6

Paire

d_12

_qua

l_7

Paire

d_12

_qua

l_8

Paire

d_12

_qua

l_9

Paire

d_12

_qua

l_10

Paire

d_12

_qua

l_11

Paire

d_12

_qua

l_12

Set3

_12_

qual

_1Se

t3_1

2_qu

al_2

Set3

_12_

qual

_3Se

t3_1

2_qu

al_4

Set3

_12_

qual

_5Se

t3_1

2_qu

al_6

Set3

_12_

qual

_7Se

t3_1

2_qu

al_8

Set3

_12_

qual

_9Se

t3_1

2_qu

al_1

0Se

t3_1

2_qu

al_1

1Se

t3_1

2_qu

al_1

2

Figure 3: ColorBrewer qualitative color schemes with 9-12 colors (continued from the schemeswith 3-8 colors in Figure 2). Each row of graphs represents a different family of color schemes,and each column represents a different number of colors. The labels below the graphs representthe color names recognized by distruct.

7

Page 9: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

BrB

G_3

_div

_1B

rBG

_3_d

iv_2

BrB

G_3

_div

_3

PiYG

_3_d

iv_1

PiYG

_3_d

iv_2

PiYG

_3_d

iv_3

PRG

n_3_

div_

1PR

Gn_

3_di

v_2

PRG

n_3_

div_

3

PuO

r_3_

div_

1Pu

Or_

3_di

v_2

PuO

r_3_

div_

3

RdB

u_3_

div_

1R

dBu_

3_di

v_2

RdB

u_3_

div_

3

RdG

y_3_

div_

1R

dGy_

3_di

v_2

RdG

y_3_

div_

3

RdY

lBu_

3_di

v_1

RdY

lBu_

3_di

v_2

RdY

lBu_

3_di

v_3

RdY

lGn_

3_di

v_1

RdY

lGn_

3_di

v_2

RdY

lGn_

3_di

v_3

Spec

tral

_3_d

iv_1

Spec

tral

_3_d

iv_2

Spec

tral

_3_d

iv_3

BrB

G_4

_div

_1B

rBG

_4_d

iv_2

BrB

G_4

_div

_3B

rBG

_4_d

iv_4

PiYG

_4_d

iv_1

PiYG

_4_d

iv_2

PiYG

_4_d

iv_3

PiYG

_4_d

iv_4

PRG

n_4_

div_

1PR

Gn_

4_di

v_2

PRG

n_4_

div_

3PR

Gn_

4_di

v_4

PuO

r_4_

div_

1Pu

Or_

4_di

v_2

PuO

r_4_

div_

3Pu

Or_

4_di

v_4

RdB

u_4_

div_

1R

dBu_

4_di

v_2

RdB

u_4_

div_

3R

dBu_

4_di

v_4

RdG

y_4_

div_

1R

dGy_

4_di

v_2

RdG

y_4_

div_

3R

dGy_

4_di

v_4

RdY

lBu_

4_di

v_1

RdY

lBu_

4_di

v_2

RdY

lBu_

4_di

v_3

RdY

lBu_

4_di

v_4

RdY

lGn_

4_di

v_1

RdY

lGn_

4_di

v_2

RdY

lGn_

4_di

v_3

RdY

lGn_

4_di

v_4

Spec

tral

_4_d

iv_1

Spec

tral

_4_d

iv_2

Spec

tral

_4_d

iv_3

Spec

tral

_4_d

iv_4

BrB

G_5

_div

_1B

rBG

_5_d

iv_2

BrB

G_5

_div

_3B

rBG

_5_d

iv_4

BrB

G_5

_div

_5

PiYG

_5_d

iv_1

PiYG

_5_d

iv_2

PiYG

_5_d

iv_3

PiYG

_5_d

iv_4

PiYG

_5_d

iv_5

PRG

n_5_

div_

1PR

Gn_

5_di

v_2

PRG

n_5_

div_

3PR

Gn_

5_di

v_4

PRG

n_5_

div_

5

PuO

r_5_

div_

1Pu

Or_

5_di

v_2

PuO

r_5_

div_

3Pu

Or_

5_di

v_4

PuO

r_5_

div_

5

RdB

u_5_

div_

1R

dBu_

5_di

v_2

RdB

u_5_

div_

3R

dBu_

5_di

v_4

RdB

u_5_

div_

5

RdG

y_5_

div_

1R

dGy_

5_di

v_2

RdG

y_5_

div_

3R

dGy_

5_di

v_4

RdG

y_5_

div_

5

RdY

lBu_

5_di

v_1

RdY

lBu_

5_di

v_2

RdY

lBu_

5_di

v_3

RdY

lBu_

5_di

v_4

RdY

lBu_

5_di

v_5

RdY

lGn_

5_di

v_1

RdY

lGn_

5_di

v_2

RdY

lGn_

5_di

v_3

RdY

lGn_

5_di

v_4

RdY

lGn_

5_di

v_5

Spec

tral

_5_d

iv_1

Spec

tral

_5_d

iv_2

Spec

tral

_5_d

iv_3

Spec

tral

_5_d

iv_4

Spec

tral

_5_d

iv_5

BrB

G_6

_div

_1B

rBG

_6_d

iv_2

BrB

G_6

_div

_3B

rBG

_6_d

iv_4

BrB

G_6

_div

_5B

rBG

_6_d

iv_6

PiYG

_6_d

iv_1

PiYG

_6_d

iv_2

PiYG

_6_d

iv_3

PiYG

_6_d

iv_4

PiYG

_6_d

iv_5

PiYG

_6_d

iv_6

PRG

n_6_

div_

1PR

Gn_

6_di

v_2

PRG

n_6_

div_

3PR

Gn_

6_di

v_4

PRG

n_6_

div_

5PR

Gn_

6_di

v_6

PuO

r_6_

div_

1Pu

Or_

6_di

v_2

PuO

r_6_

div_

3Pu

Or_

6_di

v_4

PuO

r_6_

div_

5Pu

Or_

6_di

v_6

RdB

u_6_

div_

1R

dBu_

6_di

v_2

RdB

u_6_

div_

3R

dBu_

6_di

v_4

RdB

u_6_

div_

5R

dBu_

6_di

v_6

RdG

y_6_

div_

1R

dGy_

6_di

v_2

RdG

y_6_

div_

3R

dGy_

6_di

v_4

RdG

y_6_

div_

5R

dGy_

6_di

v_6

RdY

lBu_

6_di

v_1

RdY

lBu_

6_di

v_2

RdY

lBu_

6_di

v_3

RdY

lBu_

6_di

v_4

RdY

lBu_

6_di

v_5

RdY

lBu_

6_di

v_6

RdY

lGn_

6_di

v_1

RdY

lGn_

6_di

v_2

RdY

lGn_

6_di

v_3

RdY

lGn_

6_di

v_4

RdY

lGn_

6_di

v_5

RdY

lGn_

6_di

v_6

Spec

tral

_6_d

iv_1

Spec

tral

_6_d

iv_2

Spec

tral

_6_d

iv_3

Spec

tral

_6_d

iv_4

Spec

tral

_6_d

iv_5

Spec

tral

_6_d

iv_6

BrB

G_7

_div

_1B

rBG

_7_d

iv_2

BrB

G_7

_div

_3B

rBG

_7_d

iv_4

BrB

G_7

_div

_5B

rBG

_7_d

iv_6

BrB

G_7

_div

_7

PiYG

_7_d

iv_1

PiYG

_7_d

iv_2

PiYG

_7_d

iv_3

PiYG

_7_d

iv_4

PiYG

_7_d

iv_5

PiYG

_7_d

iv_6

PiYG

_7_d

iv_7

PRG

n_7_

div_

1PR

Gn_

7_di

v_2

PRG

n_7_

div_

3PR

Gn_

7_di

v_4

PRG

n_7_

div_

5PR

Gn_

7_di

v_6

PRG

n_7_

div_

7

PuO

r_7_

div_

1Pu

Or_

7_di

v_2

PuO

r_7_

div_

3Pu

Or_

7_di

v_4

PuO

r_7_

div_

5Pu

Or_

7_di

v_6

PuO

r_7_

div_

7

RdB

u_7_

div_

1R

dBu_

7_di

v_2

RdB

u_7_

div_

3R

dBu_

7_di

v_4

RdB

u_7_

div_

5R

dBu_

7_di

v_6

RdB

u_7_

div_

7

RdG

y_7_

div_

1R

dGy_

7_di

v_2

RdG

y_7_

div_

3R

dGy_

7_di

v_4

RdG

y_7_

div_

5R

dGy_

7_di

v_6

RdG

y_7_

div_

7

RdY

lBu_

7_di

v_1

RdY

lBu_

7_di

v_2

RdY

lBu_

7_di

v_3

RdY

lBu_

7_di

v_4

RdY

lBu_

7_di

v_5

RdY

lBu_

7_di

v_6

RdY

lBu_

7_di

v_7

RdY

lGn_

7_di

v_1

RdY

lGn_

7_di

v_2

RdY

lGn_

7_di

v_3

RdY

lGn_

7_di

v_4

RdY

lGn_

7_di

v_5

RdY

lGn_

7_di

v_6

RdY

lGn_

7_di

v_7

Spec

tral

_7_d

iv_1

Spec

tral

_7_d

iv_2

Spec

tral

_7_d

iv_3

Spec

tral

_7_d

iv_4

Spec

tral

_7_d

iv_5

Spec

tral

_7_d

iv_6

Spec

tral

_7_d

iv_7

BrB

G_8

_div

_1B

rBG

_8_d

iv_2

BrB

G_8

_div

_3B

rBG

_8_d

iv_4

BrB

G_8

_div

_5B

rBG

_8_d

iv_6

BrB

G_8

_div

_7B

rBG

_8_d

iv_8

PiYG

_8_d

iv_1

PiYG

_8_d

iv_2

PiYG

_8_d

iv_3

PiYG

_8_d

iv_4

PiYG

_8_d

iv_5

PiYG

_8_d

iv_6

PiYG

_8_d

iv_7

PiYG

_8_d

iv_8

PRG

n_8_

div_

1PR

Gn_

8_di

v_2

PRG

n_8_

div_

3PR

Gn_

8_di

v_4

PRG

n_8_

div_

5PR

Gn_

8_di

v_6

PRG

n_8_

div_

7PR

Gn_

8_di

v_8

PuO

r_8_

div_

1Pu

Or_

8_di

v_2

PuO

r_8_

div_

3Pu

Or_

8_di

v_4

PuO

r_8_

div_

5Pu

Or_

8_di

v_6

PuO

r_8_

div_

7Pu

Or_

8_di

v_8

RdB

u_8_

div_

1R

dBu_

8_di

v_2

RdB

u_8_

div_

3R

dBu_

8_di

v_4

RdB

u_8_

div_

5R

dBu_

8_di

v_6

RdB

u_8_

div_

7R

dBu_

8_di

v_8

RdG

y_8_

div_

1R

dGy_

8_di

v_2

RdG

y_8_

div_

3R

dGy_

8_di

v_4

RdG

y_8_

div_

5R

dGy_

8_di

v_6

RdG

y_8_

div_

7R

dGy_

8_di

v_8

RdY

lBu_

8_di

v_1

RdY

lBu_

8_di

v_2

RdY

lBu_

8_di

v_3

RdY

lBu_

8_di

v_4

RdY

lBu_

8_di

v_5

RdY

lBu_

8_di

v_6

RdY

lBu_

8_di

v_7

RdY

lBu_

8_di

v_8

RdY

lGn_

8_di

v_1

RdY

lGn_

8_di

v_2

RdY

lGn_

8_di

v_3

RdY

lGn_

8_di

v_4

RdY

lGn_

8_di

v_5

RdY

lGn_

8_di

v_6

RdY

lGn_

8_di

v_7

RdY

lGn_

8_di

v_8

Spec

tral

_8_d

iv_1

Spec

tral

_8_d

iv_2

Spec

tral

_8_d

iv_3

Spec

tral

_8_d

iv_4

Spec

tral

_8_d

iv_5

Spec

tral

_8_d

iv_6

Spec

tral

_8_d

iv_7

Spec

tral

_8_d

iv_8

Figure 4: ColorBrewer diverging color schemes with 3-8 colors. Each row of graphs represents adifferent family of color schemes, and each column represents a different number of colors. Thelabels below the graphs represent the color names recognized by distruct.

8

Page 10: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

BrB

G_9

_div

_1B

rBG

_9_d

iv_2

BrB

G_9

_div

_3B

rBG

_9_d

iv_4

BrB

G_9

_div

_5B

rBG

_9_d

iv_6

BrB

G_9

_div

_7B

rBG

_9_d

iv_8

BrB

G_9

_div

_9

PiYG

_9_d

iv_1

PiYG

_9_d

iv_2

PiYG

_9_d

iv_3

PiYG

_9_d

iv_4

PiYG

_9_d

iv_5

PiYG

_9_d

iv_6

PiYG

_9_d

iv_7

PiYG

_9_d

iv_8

PiYG

_9_d

iv_9

PRG

n_9_

div_

1PR

Gn_

9_di

v_2

PRG

n_9_

div_

3PR

Gn_

9_di

v_4

PRG

n_9_

div_

5PR

Gn_

9_di

v_6

PRG

n_9_

div_

7PR

Gn_

9_di

v_8

PRG

n_9_

div_

9

PuO

r_9_

div_

1Pu

Or_

9_di

v_2

PuO

r_9_

div_

3Pu

Or_

9_di

v_4

PuO

r_9_

div_

5Pu

Or_

9_di

v_6

PuO

r_9_

div_

7Pu

Or_

9_di

v_8

PuO

r_9_

div_

9

RdB

u_9_

div_

1R

dBu_

9_di

v_2

RdB

u_9_

div_

3R

dBu_

9_di

v_4

RdB

u_9_

div_

5R

dBu_

9_di

v_6

RdB

u_9_

div_

7R

dBu_

9_di

v_8

RdB

u_9_

div_

9

RdG

y_9_

div_

1R

dGy_

9_di

v_2

RdG

y_9_

div_

3R

dGy_

9_di

v_4

RdG

y_9_

div_

5R

dGy_

9_di

v_6

RdG

y_9_

div_

7R

dGy_

9_di

v_8

RdG

y_9_

div_

9

RdY

lBu_

9_di

v_1

RdY

lBu_

9_di

v_2

RdY

lBu_

9_di

v_3

RdY

lBu_

9_di

v_4

RdY

lBu_

9_di

v_5

RdY

lBu_

9_di

v_6

RdY

lBu_

9_di

v_7

RdY

lBu_

9_di

v_8

RdY

lBu_

9_di

v_9

RdY

lGn_

9_di

v_1

RdY

lGn_

9_di

v_2

RdY

lGn_

9_di

v_3

RdY

lGn_

9_di

v_4

RdY

lGn_

9_di

v_5

RdY

lGn_

9_di

v_6

RdY

lGn_

9_di

v_7

RdY

lGn_

9_di

v_8

RdY

lGn_

9_di

v_9

Spec

tral

_9_d

iv_1

Spec

tral

_9_d

iv_2

Spec

tral

_9_d

iv_3

Spec

tral

_9_d

iv_4

Spec

tral

_9_d

iv_5

Spec

tral

_9_d

iv_6

Spec

tral

_9_d

iv_7

Spec

tral

_9_d

iv_8

Spec

tral

_9_d

iv_9

BrB

G_1

0_di

v_1

BrB

G_1

0_di

v_2

BrB

G_1

0_di

v_3

BrB

G_1

0_di

v_4

BrB

G_1

0_di

v_5

BrB

G_1

0_di

v_6

BrB

G_1

0_di

v_7

BrB

G_1

0_di

v_8

BrB

G_1

0_di

v_9

BrB

G_1

0_di

v_10

PiYG

_10_

div_

1Pi

YG_1

0_di

v_2

PiYG

_10_

div_

3Pi

YG_1

0_di

v_4

PiYG

_10_

div_

5Pi

YG_1

0_di

v_6

PiYG

_10_

div_

7Pi

YG_1

0_di

v_8

PiYG

_10_

div_

9Pi

YG_1

0_di

v_10

PRG

n_10

_div

_1PR

Gn_

10_d

iv_2

PRG

n_10

_div

_3PR

Gn_

10_d

iv_4

PRG

n_10

_div

_5PR

Gn_

10_d

iv_6

PRG

n_10

_div

_7PR

Gn_

10_d

iv_8

PRG

n_10

_div

_9PR

Gn_

10_d

iv_1

0

PuO

r_10

_div

_1Pu

Or_

10_d

iv_2

PuO

r_10

_div

_3Pu

Or_

10_d

iv_4

PuO

r_10

_div

_5Pu

Or_

10_d

iv_6

PuO

r_10

_div

_7Pu

Or_

10_d

iv_8

PuO

r_10

_div

_9Pu

Or_

10_d

iv_1

0

RdB

u_10

_div

_1R

dBu_

10_d

iv_2

RdB

u_10

_div

_3R

dBu_

10_d

iv_4

RdB

u_10

_div

_5R

dBu_

10_d

iv_6

RdB

u_10

_div

_7R

dBu_

10_d

iv_8

RdB

u_10

_div

_9R

dBu_

10_d

iv_1

0

RdG

y_10

_div

_1R

dGy_

10_d

iv_2

RdG

y_10

_div

_3R

dGy_

10_d

iv_4

RdG

y_10

_div

_5R

dGy_

10_d

iv_6

RdG

y_10

_div

_7R

dGy_

10_d

iv_8

RdG

y_10

_div

_9R

dGy_

10_d

iv_1

0

RdY

lBu_

10_d

iv_1

RdY

lBu_

10_d

iv_2

RdY

lBu_

10_d

iv_3

RdY

lBu_

10_d

iv_4

RdY

lBu_

10_d

iv_5

RdY

lBu_

10_d

iv_6

RdY

lBu_

10_d

iv_7

RdY

lBu_

10_d

iv_8

RdY

lBu_

10_d

iv_9

RdY

lBu_

10_d

iv_1

0

RdY

lGn_

10_d

iv_1

RdY

lGn_

10_d

iv_2

RdY

lGn_

10_d

iv_3

RdY

lGn_

10_d

iv_4

RdY

lGn_

10_d

iv_5

RdY

lGn_

10_d

iv_6

RdY

lGn_

10_d

iv_7

RdY

lGn_

10_d

iv_8

RdY

lGn_

10_d

iv_9

RdY

lGn_

10_d

iv_1

0

Spec

tral

_10_

div_

1

Spec

tral

_10_

div_

2

Spec

tral

_10_

div_

3

Spec

tral

_10_

div_

4

Spec

tral

_10_

div_

5

Spec

tral

_10_

div_

6

Spec

tral

_10_

div_

7

Spec

tral

_10_

div_

8

Spec

tral

_10_

div_

9

Spec

tral

_10_

div_

10

BrB

G_1

1_di

v_1

BrB

G_1

1_di

v_2

BrB

G_1

1_di

v_3

BrB

G_1

1_di

v_4

BrB

G_1

1_di

v_5

BrB

G_1

1_di

v_6

BrB

G_1

1_di

v_7

BrB

G_1

1_di

v_8

BrB

G_1

1_di

v_9

BrB

G_1

1_di

v_10

BrB

G_1

1_di

v_11

PiYG

_11_

div_

1Pi

YG_1

1_di

v_2

PiYG

_11_

div_

3Pi

YG_1

1_di

v_4

PiYG

_11_

div_

5Pi

YG_1

1_di

v_6

PiYG

_11_

div_

7Pi

YG_1

1_di

v_8

PiYG

_11_

div_

9Pi

YG_1

1_di

v_10

PiYG

_11_

div_

11

PRG

n_11

_div

_1PR

Gn_

11_d

iv_2

PRG

n_11

_div

_3PR

Gn_

11_d

iv_4

PRG

n_11

_div

_5PR

Gn_

11_d

iv_6

PRG

n_11

_div

_7PR

Gn_

11_d

iv_8

PRG

n_11

_div

_9PR

Gn_

11_d

iv_1

0PR

Gn_

11_d

iv_1

1

PuO

r_11

_div

_1Pu

Or_

11_d

iv_2

PuO

r_11

_div

_3Pu

Or_

11_d

iv_4

PuO

r_11

_div

_5Pu

Or_

11_d

iv_6

PuO

r_11

_div

_7Pu

Or_

11_d

iv_8

PuO

r_11

_div

_9Pu

Or_

11_d

iv_1

0Pu

Or_

11_d

iv_1

1

RdB

u_11

_div

_1R

dBu_

11_d

iv_2

RdB

u_11

_div

_3R

dBu_

11_d

iv_4

RdB

u_11

_div

_5R

dBu_

11_d

iv_6

RdB

u_11

_div

_7R

dBu_

11_d

iv_8

RdB

u_11

_div

_9R

dBu_

11_d

iv_1

0R

dBu_

11_d

iv_1

1

RdG

y_11

_div

_1R

dGy_

11_d

iv_2

RdG

y_11

_div

_3R

dGy_

11_d

iv_4

RdG

y_11

_div

_5R

dGy_

11_d

iv_6

RdG

y_11

_div

_7R

dGy_

11_d

iv_8

RdG

y_11

_div

_9R

dGy_

11_d

iv_1

0R

dGy_

11_d

iv_1

1

RdY

lBu_

11_d

iv_1

RdY

lBu_

11_d

iv_2

RdY

lBu_

11_d

iv_3

RdY

lBu_

11_d

iv_4

RdY

lBu_

11_d

iv_5

RdY

lBu_

11_d

iv_6

RdY

lBu_

11_d

iv_7

RdY

lBu_

11_d

iv_8

RdY

lBu_

11_d

iv_9

RdY

lBu_

11_d

iv_1

0

RdY

lBu_

11_d

iv_1

1

RdY

lGn_

11_d

iv_1

RdY

lGn_

11_d

iv_2

RdY

lGn_

11_d

iv_3

RdY

lGn_

11_d

iv_4

RdY

lGn_

11_d

iv_5

RdY

lGn_

11_d

iv_6

RdY

lGn_

11_d

iv_7

RdY

lGn_

11_d

iv_8

RdY

lGn_

11_d

iv_9

RdY

lGn_

11_d

iv_1

0

RdY

lGn_

11_d

iv_1

1

Spec

tral

_11_

div_

1

Spec

tral

_11_

div_

2

Spec

tral

_11_

div_

3

Spec

tral

_11_

div_

4

Spec

tral

_11_

div_

5

Spec

tral

_11_

div_

6

Spec

tral

_11_

div_

7

Spec

tral

_11_

div_

8

Spec

tral

_11_

div_

9

Spec

tral

_11_

div_

10

Spec

tral

_11_

div_

11

Figure 5: ColorBrewer diverging color schemes with 9-11 colors (continued from the schemeswith 3-8 colors in Figure 4). Each row of graphs represents a different family of color schemes,and each column represents a different number of colors. The labels below the graphs representthe color names recognized by distruct.

9

Page 11: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Blu

es_3

_seq

_1B

lues

_3_s

eq_2

Blu

es_3

_seq

_3

BuG

n_3_

seq_

1B

uGn_

3_se

q_2

BuG

n_3_

seq_

3

BuP

u_3_

seq_

1B

uPu_

3_se

q_2

BuP

u_3_

seq_

3

GnB

u_3_

seq_

1G

nBu_

3_se

q_2

GnB

u_3_

seq_

3

Gre

ens_

3_se

q_1

Gre

ens_

3_se

q_2

Gre

ens_

3_se

q_3

Gre

ys_3

_seq

_1G

reys

_3_s

eq_2

Gre

ys_3

_seq

_3

Ora

nges

_3_s

eq_1

Ora

nges

_3_s

eq_2

Ora

nges

_3_s

eq_3

OrR

d_3_

seq_

1O

rRd_

3_se

q_2

OrR

d_3_

seq_

3

PuB

u_3_

seq_

1Pu

Bu_

3_se

q_2

PuB

u_3_

seq_

3

Blu

es_4

_seq

_1B

lues

_4_s

eq_2

Blu

es_4

_seq

_3B

lues

_4_s

eq_4

BuG

n_4_

seq_

1B

uGn_

4_se

q_2

BuG

n_4_

seq_

3B

uGn_

4_se

q_4

BuP

u_4_

seq_

1B

uPu_

4_se

q_2

BuP

u_4_

seq_

3B

uPu_

4_se

q_4

GnB

u_4_

seq_

1G

nBu_

4_se

q_2

GnB

u_4_

seq_

3G

nBu_

4_se

q_4

Gre

ens_

4_se

q_1

Gre

ens_

4_se

q_2

Gre

ens_

4_se

q_3

Gre

ens_

4_se

q_4

Gre

ys_4

_seq

_1G

reys

_4_s

eq_2

Gre

ys_4

_seq

_3G

reys

_4_s

eq_4

Ora

nges

_4_s

eq_1

Ora

nges

_4_s

eq_2

Ora

nges

_4_s

eq_3

Ora

nges

_4_s

eq_4

OrR

d_4_

seq_

1O

rRd_

4_se

q_2

OrR

d_4_

seq_

3O

rRd_

4_se

q_4

PuB

u_4_

seq_

1Pu

Bu_

4_se

q_2

PuB

u_4_

seq_

3Pu

Bu_

4_se

q_4

Blu

es_5

_seq

_1B

lues

_5_s

eq_2

Blu

es_5

_seq

_3B

lues

_5_s

eq_4

Blu

es_5

_seq

_5

BuG

n_5_

seq_

1B

uGn_

5_se

q_2

BuG

n_5_

seq_

3B

uGn_

5_se

q_4

BuG

n_5_

seq_

5

BuP

u_5_

seq_

1B

uPu_

5_se

q_2

BuP

u_5_

seq_

3B

uPu_

5_se

q_4

BuP

u_5_

seq_

5

GnB

u_5_

seq_

1G

nBu_

5_se

q_2

GnB

u_5_

seq_

3G

nBu_

5_se

q_4

GnB

u_5_

seq_

5

Gre

ens_

5_se

q_1

Gre

ens_

5_se

q_2

Gre

ens_

5_se

q_3

Gre

ens_

5_se

q_4

Gre

ens_

5_se

q_5

Gre

ys_5

_seq

_1G

reys

_5_s

eq_2

Gre

ys_5

_seq

_3G

reys

_5_s

eq_4

Gre

ys_5

_seq

_5

Ora

nges

_5_s

eq_1

Ora

nges

_5_s

eq_2

Ora

nges

_5_s

eq_3

Ora

nges

_5_s

eq_4

Ora

nges

_5_s

eq_5

OrR

d_5_

seq_

1O

rRd_

5_se

q_2

OrR

d_5_

seq_

3O

rRd_

5_se

q_4

OrR

d_5_

seq_

5

PuB

u_5_

seq_

1Pu

Bu_

5_se

q_2

PuB

u_5_

seq_

3Pu

Bu_

5_se

q_4

PuB

u_5_

seq_

5

Blu

es_6

_seq

_1B

lues

_6_s

eq_2

Blu

es_6

_seq

_3B

lues

_6_s

eq_4

Blu

es_6

_seq

_5B

lues

_6_s

eq_6

BuG

n_6_

seq_

1B

uGn_

6_se

q_2

BuG

n_6_

seq_

3B

uGn_

6_se

q_4

BuG

n_6_

seq_

5B

uGn_

6_se

q_6

BuP

u_6_

seq_

1B

uPu_

6_se

q_2

BuP

u_6_

seq_

3B

uPu_

6_se

q_4

BuP

u_6_

seq_

5B

uPu_

6_se

q_6

GnB

u_6_

seq_

1G

nBu_

6_se

q_2

GnB

u_6_

seq_

3G

nBu_

6_se

q_4

GnB

u_6_

seq_

5G

nBu_

6_se

q_6

Gre

ens_

6_se

q_1

Gre

ens_

6_se

q_2

Gre

ens_

6_se

q_3

Gre

ens_

6_se

q_4

Gre

ens_

6_se

q_5

Gre

ens_

6_se

q_6

Gre

ys_6

_seq

_1G

reys

_6_s

eq_2

Gre

ys_6

_seq

_3G

reys

_6_s

eq_4

Gre

ys_6

_seq

_5G

reys

_6_s

eq_6

Ora

nges

_6_s

eq_1

Ora

nges

_6_s

eq_2

Ora

nges

_6_s

eq_3

Ora

nges

_6_s

eq_4

Ora

nges

_6_s

eq_5

Ora

nges

_6_s

eq_6

OrR

d_6_

seq_

1O

rRd_

6_se

q_2

OrR

d_6_

seq_

3O

rRd_

6_se

q_4

OrR

d_6_

seq_

5O

rRd_

6_se

q_6

PuB

u_6_

seq_

1Pu

Bu_

6_se

q_2

PuB

u_6_

seq_

3Pu

Bu_

6_se

q_4

PuB

u_6_

seq_

5Pu

Bu_

6_se

q_6

Blu

es_7

_seq

_1B

lues

_7_s

eq_2

Blu

es_7

_seq

_3B

lues

_7_s

eq_4

Blu

es_7

_seq

_5B

lues

_7_s

eq_6

Blu

es_7

_seq

_7

BuG

n_7_

seq_

1B

uGn_

7_se

q_2

BuG

n_7_

seq_

3B

uGn_

7_se

q_4

BuG

n_7_

seq_

5B

uGn_

7_se

q_6

BuG

n_7_

seq_

7

BuP

u_7_

seq_

1B

uPu_

7_se

q_2

BuP

u_7_

seq_

3B

uPu_

7_se

q_4

BuP

u_7_

seq_

5B

uPu_

7_se

q_6

BuP

u_7_

seq_

7

GnB

u_7_

seq_

1G

nBu_

7_se

q_2

GnB

u_7_

seq_

3G

nBu_

7_se

q_4

GnB

u_7_

seq_

5G

nBu_

7_se

q_6

GnB

u_7_

seq_

7

Gre

ens_

7_se

q_1

Gre

ens_

7_se

q_2

Gre

ens_

7_se

q_3

Gre

ens_

7_se

q_4

Gre

ens_

7_se

q_5

Gre

ens_

7_se

q_6

Gre

ens_

7_se

q_7

Gre

ys_7

_seq

_1G

reys

_7_s

eq_2

Gre

ys_7

_seq

_3G

reys

_7_s

eq_4

Gre

ys_7

_seq

_5G

reys

_7_s

eq_6

Gre

ys_7

_seq

_7

Ora

nges

_7_s

eq_1

Ora

nges

_7_s

eq_2

Ora

nges

_7_s

eq_3

Ora

nges

_7_s

eq_4

Ora

nges

_7_s

eq_5

Ora

nges

_7_s

eq_6

Ora

nges

_7_s

eq_7

OrR

d_7_

seq_

1O

rRd_

7_se

q_2

OrR

d_7_

seq_

3O

rRd_

7_se

q_4

OrR

d_7_

seq_

5O

rRd_

7_se

q_6

OrR

d_7_

seq_

7

PuB

u_7_

seq_

1Pu

Bu_

7_se

q_2

PuB

u_7_

seq_

3Pu

Bu_

7_se

q_4

PuB

u_7_

seq_

5Pu

Bu_

7_se

q_6

PuB

u_7_

seq_

7

Blu

es_8

_seq

_1B

lues

_8_s

eq_2

Blu

es_8

_seq

_3B

lues

_8_s

eq_4

Blu

es_8

_seq

_5B

lues

_8_s

eq_6

Blu

es_8

_seq

_7B

lues

_8_s

eq_8

BuG

n_8_

seq_

1B

uGn_

8_se

q_2

BuG

n_8_

seq_

3B

uGn_

8_se

q_4

BuG

n_8_

seq_

5B

uGn_

8_se

q_6

BuG

n_8_

seq_

7B

uGn_

8_se

q_8

BuP

u_8_

seq_

1B

uPu_

8_se

q_2

BuP

u_8_

seq_

3B

uPu_

8_se

q_4

BuP

u_8_

seq_

5B

uPu_

8_se

q_6

BuP

u_8_

seq_

7B

uPu_

8_se

q_8

GnB

u_8_

seq_

1G

nBu_

8_se

q_2

GnB

u_8_

seq_

3G

nBu_

8_se

q_4

GnB

u_8_

seq_

5G

nBu_

8_se

q_6

GnB

u_8_

seq_

7G

nBu_

8_se

q_8

Gre

ens_

8_se

q_1

Gre

ens_

8_se

q_2

Gre

ens_

8_se

q_3

Gre

ens_

8_se

q_4

Gre

ens_

8_se

q_5

Gre

ens_

8_se

q_6

Gre

ens_

8_se

q_7

Gre

ens_

8_se

q_8

Gre

ys_8

_seq

_1G

reys

_8_s

eq_2

Gre

ys_8

_seq

_3G

reys

_8_s

eq_4

Gre

ys_8

_seq

_5G

reys

_8_s

eq_6

Gre

ys_8

_seq

_7G

reys

_8_s

eq_8

Ora

nges

_8_s

eq_1

Ora

nges

_8_s

eq_2

Ora

nges

_8_s

eq_3

Ora

nges

_8_s

eq_4

Ora

nges

_8_s

eq_5

Ora

nges

_8_s

eq_6

Ora

nges

_8_s

eq_7

Ora

nges

_8_s

eq_8

OrR

d_8_

seq_

1O

rRd_

8_se

q_2

OrR

d_8_

seq_

3O

rRd_

8_se

q_4

OrR

d_8_

seq_

5O

rRd_

8_se

q_6

OrR

d_8_

seq_

7O

rRd_

8_se

q_8

PuB

u_8_

seq_

1Pu

Bu_

8_se

q_2

PuB

u_8_

seq_

3Pu

Bu_

8_se

q_4

PuB

u_8_

seq_

5Pu

Bu_

8_se

q_6

PuB

u_8_

seq_

7Pu

Bu_

8_se

q_8

Figure 6: ColorBrewer sequential color schemes with 3-8 colors. Each row of graphs represents adifferent family of color schemes, and each column represents a different number of colors. Thelabels below the graphs represent the color names recognized by distruct.

10

Page 12: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Blu

es_9

_seq

_1B

lues

_9_s

eq_2

Blu

es_9

_seq

_3B

lues

_9_s

eq_4

Blu

es_9

_seq

_5B

lues

_9_s

eq_6

Blu

es_9

_seq

_7B

lues

_9_s

eq_8

Blu

es_9

_seq

_9

BuG

n_9_

seq_

1B

uGn_

9_se

q_2

BuG

n_9_

seq_

3B

uGn_

9_se

q_4

BuG

n_9_

seq_

5B

uGn_

9_se

q_6

BuG

n_9_

seq_

7B

uGn_

9_se

q_8

BuG

n_9_

seq_

9

BuP

u_9_

seq_

1B

uPu_

9_se

q_2

BuP

u_9_

seq_

3B

uPu_

9_se

q_4

BuP

u_9_

seq_

5B

uPu_

9_se

q_6

BuP

u_9_

seq_

7B

uPu_

9_se

q_8

BuP

u_9_

seq_

9

GnB

u_9_

seq_

1G

nBu_

9_se

q_2

GnB

u_9_

seq_

3G

nBu_

9_se

q_4

GnB

u_9_

seq_

5G

nBu_

9_se

q_6

GnB

u_9_

seq_

7G

nBu_

9_se

q_8

GnB

u_9_

seq_

9

Gre

ens_

9_se

q_1

Gre

ens_

9_se

q_2

Gre

ens_

9_se

q_3

Gre

ens_

9_se

q_4

Gre

ens_

9_se

q_5

Gre

ens_

9_se

q_6

Gre

ens_

9_se

q_7

Gre

ens_

9_se

q_8

Gre

ens_

9_se

q_9

Gre

ys_9

_seq

_1G

reys

_9_s

eq_2

Gre

ys_9

_seq

_3G

reys

_9_s

eq_4

Gre

ys_9

_seq

_5G

reys

_9_s

eq_6

Gre

ys_9

_seq

_7G

reys

_9_s

eq_8

Gre

ys_9

_seq

_9

Ora

nges

_9_s

eq_1

Ora

nges

_9_s

eq_2

Ora

nges

_9_s

eq_3

Ora

nges

_9_s

eq_4

Ora

nges

_9_s

eq_5

Ora

nges

_9_s

eq_6

Ora

nges

_9_s

eq_7

Ora

nges

_9_s

eq_8

Ora

nges

_9_s

eq_9

OrR

d_9_

seq_

1O

rRd_

9_se

q_2

OrR

d_9_

seq_

3O

rRd_

9_se

q_4

OrR

d_9_

seq_

5O

rRd_

9_se

q_6

OrR

d_9_

seq_

7O

rRd_

9_se

q_8

OrR

d_9_

seq_

9

PuB

u_9_

seq_

1Pu

Bu_

9_se

q_2

PuB

u_9_

seq_

3Pu

Bu_

9_se

q_4

PuB

u_9_

seq_

5Pu

Bu_

9_se

q_6

PuB

u_9_

seq_

7Pu

Bu_

9_se

q_8

PuB

u_9_

seq_

9

Figure 7: ColorBrewer sequential color schemes with 9 colors (continued from the schemes with3-8 colors in Figure 6). Each row of graphs represents a different family of color schemes, andeach column represents a different number of colors. The labels below the graphs represent thecolor names recognized by distruct.

11

Page 13: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

PuB

uGn_

3_se

q_1

PuB

uGn_

3_se

q_2

PuB

uGn_

3_se

q_3

PuR

d_3_

seq_

1Pu

Rd_

3_se

q_2

PuR

d_3_

seq_

3

Purp

les_

3_se

q_1

Purp

les_

3_se

q_2

Purp

les_

3_se

q_3

RdP

u_3_

seq_

1R

dPu_

3_se

q_2

RdP

u_3_

seq_

3

Red

s_3_

seq_

1R

eds_

3_se

q_2

Red

s_3_

seq_

3

YlG

n_3_

seq_

1Yl

Gn_

3_se

q_2

YlG

n_3_

seq_

3

YlG

nBu_

3_se

q_1

YlG

nBu_

3_se

q_2

YlG

nBu_

3_se

q_3

YlO

rBr_

3_se

q_1

YlO

rBr_

3_se

q_2

YlO

rBr_

3_se

q_3

YlO

rRd_

3_se

q_1

YlO

rRd_

3_se

q_2

YlO

rRd_

3_se

q_3

PuB

uGn_

4_se

q_1

PuB

uGn_

4_se

q_2

PuB

uGn_

4_se

q_3

PuB

uGn_

4_se

q_4

PuR

d_4_

seq_

1Pu

Rd_

4_se

q_2

PuR

d_4_

seq_

3Pu

Rd_

4_se

q_4

Purp

les_

4_se

q_1

Purp

les_

4_se

q_2

Purp

les_

4_se

q_3

Purp

les_

4_se

q_4

RdP

u_4_

seq_

1R

dPu_

4_se

q_2

RdP

u_4_

seq_

3R

dPu_

4_se

q_4

Red

s_4_

seq_

1R

eds_

4_se

q_2

Red

s_4_

seq_

3R

eds_

4_se

q_4

YlG

n_4_

seq_

1Yl

Gn_

4_se

q_2

YlG

n_4_

seq_

3Yl

Gn_

4_se

q_4

YlG

nBu_

4_se

q_1

YlG

nBu_

4_se

q_2

YlG

nBu_

4_se

q_3

YlG

nBu_

4_se

q_4

YlO

rBr_

4_se

q_1

YlO

rBr_

4_se

q_2

YlO

rBr_

4_se

q_3

YlO

rBr_

4_se

q_4

YlO

rRd_

4_se

q_1

YlO

rRd_

4_se

q_2

YlO

rRd_

4_se

q_3

YlO

rRd_

4_se

q_4

PuB

uGn_

5_se

q_1

PuB

uGn_

5_se

q_2

PuB

uGn_

5_se

q_3

PuB

uGn_

5_se

q_4

PuB

uGn_

5_se

q_5

PuR

d_5_

seq_

1Pu

Rd_

5_se

q_2

PuR

d_5_

seq_

3Pu

Rd_

5_se

q_4

PuR

d_5_

seq_

5

Purp

les_

5_se

q_1

Purp

les_

5_se

q_2

Purp

les_

5_se

q_3

Purp

les_

5_se

q_4

Purp

les_

5_se

q_5

RdP

u_5_

seq_

1R

dPu_

5_se

q_2

RdP

u_5_

seq_

3R

dPu_

5_se

q_4

RdP

u_5_

seq_

5

Red

s_5_

seq_

1R

eds_

5_se

q_2

Red

s_5_

seq_

3R

eds_

5_se

q_4

Red

s_5_

seq_

5

YlG

n_5_

seq_

1Yl

Gn_

5_se

q_2

YlG

n_5_

seq_

3Yl

Gn_

5_se

q_4

YlG

n_5_

seq_

5

YlG

nBu_

5_se

q_1

YlG

nBu_

5_se

q_2

YlG

nBu_

5_se

q_3

YlG

nBu_

5_se

q_4

YlG

nBu_

5_se

q_5

YlO

rBr_

5_se

q_1

YlO

rBr_

5_se

q_2

YlO

rBr_

5_se

q_3

YlO

rBr_

5_se

q_4

YlO

rBr_

5_se

q_5

YlO

rRd_

5_se

q_1

YlO

rRd_

5_se

q_2

YlO

rRd_

5_se

q_3

YlO

rRd_

5_se

q_4

YlO

rRd_

5_se

q_5

PuB

uGn_

6_se

q_1

PuB

uGn_

6_se

q_2

PuB

uGn_

6_se

q_3

PuB

uGn_

6_se

q_4

PuB

uGn_

6_se

q_5

PuB

uGn_

6_se

q_6

PuR

d_6_

seq_

1Pu

Rd_

6_se

q_2

PuR

d_6_

seq_

3Pu

Rd_

6_se

q_4

PuR

d_6_

seq_

5Pu

Rd_

6_se

q_6

Purp

les_

6_se

q_1

Purp

les_

6_se

q_2

Purp

les_

6_se

q_3

Purp

les_

6_se

q_4

Purp

les_

6_se

q_5

Purp

les_

6_se

q_6

RdP

u_6_

seq_

1R

dPu_

6_se

q_2

RdP

u_6_

seq_

3R

dPu_

6_se

q_4

RdP

u_6_

seq_

5R

dPu_

6_se

q_6

Red

s_6_

seq_

1R

eds_

6_se

q_2

Red

s_6_

seq_

3R

eds_

6_se

q_4

Red

s_6_

seq_

5R

eds_

6_se

q_6

YlG

n_6_

seq_

1Yl

Gn_

6_se

q_2

YlG

n_6_

seq_

3Yl

Gn_

6_se

q_4

YlG

n_6_

seq_

5Yl

Gn_

6_se

q_6

YlG

nBu_

6_se

q_1

YlG

nBu_

6_se

q_2

YlG

nBu_

6_se

q_3

YlG

nBu_

6_se

q_4

YlG

nBu_

6_se

q_5

YlG

nBu_

6_se

q_6

YlO

rBr_

6_se

q_1

YlO

rBr_

6_se

q_2

YlO

rBr_

6_se

q_3

YlO

rBr_

6_se

q_4

YlO

rBr_

6_se

q_5

YlO

rBr_

6_se

q_6

YlO

rRd_

6_se

q_1

YlO

rRd_

6_se

q_2

YlO

rRd_

6_se

q_3

YlO

rRd_

6_se

q_4

YlO

rRd_

6_se

q_5

YlO

rRd_

6_se

q_6

PuB

uGn_

7_se

q_1

PuB

uGn_

7_se

q_2

PuB

uGn_

7_se

q_3

PuB

uGn_

7_se

q_4

PuB

uGn_

7_se

q_5

PuB

uGn_

7_se

q_6

PuB

uGn_

7_se

q_7

PuR

d_7_

seq_

1Pu

Rd_

7_se

q_2

PuR

d_7_

seq_

3Pu

Rd_

7_se

q_4

PuR

d_7_

seq_

5Pu

Rd_

7_se

q_6

PuR

d_7_

seq_

7

Purp

les_

7_se

q_1

Purp

les_

7_se

q_2

Purp

les_

7_se

q_3

Purp

les_

7_se

q_4

Purp

les_

7_se

q_5

Purp

les_

7_se

q_6

Purp

les_

7_se

q_7

RdP

u_7_

seq_

1R

dPu_

7_se

q_2

RdP

u_7_

seq_

3R

dPu_

7_se

q_4

RdP

u_7_

seq_

5R

dPu_

7_se

q_6

RdP

u_7_

seq_

7

Red

s_7_

seq_

1R

eds_

7_se

q_2

Red

s_7_

seq_

3R

eds_

7_se

q_4

Red

s_7_

seq_

5R

eds_

7_se

q_6

Red

s_7_

seq_

7

YlG

n_7_

seq_

1Yl

Gn_

7_se

q_2

YlG

n_7_

seq_

3Yl

Gn_

7_se

q_4

YlG

n_7_

seq_

5Yl

Gn_

7_se

q_6

YlG

n_7_

seq_

7

YlG

nBu_

7_se

q_1

YlG

nBu_

7_se

q_2

YlG

nBu_

7_se

q_3

YlG

nBu_

7_se

q_4

YlG

nBu_

7_se

q_5

YlG

nBu_

7_se

q_6

YlG

nBu_

7_se

q_7

YlO

rBr_

7_se

q_1

YlO

rBr_

7_se

q_2

YlO

rBr_

7_se

q_3

YlO

rBr_

7_se

q_4

YlO

rBr_

7_se

q_5

YlO

rBr_

7_se

q_6

YlO

rBr_

7_se

q_7

YlO

rRd_

7_se

q_1

YlO

rRd_

7_se

q_2

YlO

rRd_

7_se

q_3

YlO

rRd_

7_se

q_4

YlO

rRd_

7_se

q_5

YlO

rRd_

7_se

q_6

YlO

rRd_

7_se

q_7

PuB

uGn_

8_se

q_1

PuB

uGn_

8_se

q_2

PuB

uGn_

8_se

q_3

PuB

uGn_

8_se

q_4

PuB

uGn_

8_se

q_5

PuB

uGn_

8_se

q_6

PuB

uGn_

8_se

q_7

PuB

uGn_

8_se

q_8

PuR

d_8_

seq_

1Pu

Rd_

8_se

q_2

PuR

d_8_

seq_

3Pu

Rd_

8_se

q_4

PuR

d_8_

seq_

5Pu

Rd_

8_se

q_6

PuR

d_8_

seq_

7Pu

Rd_

8_se

q_8

Purp

les_

8_se

q_1

Purp

les_

8_se

q_2

Purp

les_

8_se

q_3

Purp

les_

8_se

q_4

Purp

les_

8_se

q_5

Purp

les_

8_se

q_6

Purp

les_

8_se

q_7

Purp

les_

8_se

q_8

RdP

u_8_

seq_

1R

dPu_

8_se

q_2

RdP

u_8_

seq_

3R

dPu_

8_se

q_4

RdP

u_8_

seq_

5R

dPu_

8_se

q_6

RdP

u_8_

seq_

7R

dPu_

8_se

q_8

Red

s_8_

seq_

1R

eds_

8_se

q_2

Red

s_8_

seq_

3R

eds_

8_se

q_4

Red

s_8_

seq_

5R

eds_

8_se

q_6

Red

s_8_

seq_

7R

eds_

8_se

q_8

YlG

n_8_

seq_

1Yl

Gn_

8_se

q_2

YlG

n_8_

seq_

3Yl

Gn_

8_se

q_4

YlG

n_8_

seq_

5Yl

Gn_

8_se

q_6

YlG

n_8_

seq_

7Yl

Gn_

8_se

q_8

YlG

nBu_

8_se

q_1

YlG

nBu_

8_se

q_2

YlG

nBu_

8_se

q_3

YlG

nBu_

8_se

q_4

YlG

nBu_

8_se

q_5

YlG

nBu_

8_se

q_6

YlG

nBu_

8_se

q_7

YlG

nBu_

8_se

q_8

YlO

rBr_

8_se

q_1

YlO

rBr_

8_se

q_2

YlO

rBr_

8_se

q_3

YlO

rBr_

8_se

q_4

YlO

rBr_

8_se

q_5

YlO

rBr_

8_se

q_6

YlO

rBr_

8_se

q_7

YlO

rBr_

8_se

q_8

YlO

rRd_

8_se

q_1

YlO

rRd_

8_se

q_2

YlO

rRd_

8_se

q_3

YlO

rRd_

8_se

q_4

YlO

rRd_

8_se

q_5

YlO

rRd_

8_se

q_6

YlO

rRd_

8_se

q_7

YlO

rRd_

8_se

q_8

Figure 8: ColorBrewer sequential color schemes with 3-8 colors. Each row of graphs represents adifferent family of color schemes, and each column represents a different number of colors. Thelabels below the graphs represent the color names recognized by distruct.

12

Page 14: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

PuB

uGn_

9_se

q_1

PuB

uGn_

9_se

q_2

PuB

uGn_

9_se

q_3

PuB

uGn_

9_se

q_4

PuB

uGn_

9_se

q_5

PuB

uGn_

9_se

q_6

PuB

uGn_

9_se

q_7

PuB

uGn_

9_se

q_8

PuB

uGn_

9_se

q_9

PuR

d_9_

seq_

1Pu

Rd_

9_se

q_2

PuR

d_9_

seq_

3Pu

Rd_

9_se

q_4

PuR

d_9_

seq_

5Pu

Rd_

9_se

q_6

PuR

d_9_

seq_

7Pu

Rd_

9_se

q_8

PuR

d_9_

seq_

9

Purp

les_

9_se

q_1

Purp

les_

9_se

q_2

Purp

les_

9_se

q_3

Purp

les_

9_se

q_4

Purp

les_

9_se

q_5

Purp

les_

9_se

q_6

Purp

les_

9_se

q_7

Purp

les_

9_se

q_8

Purp

les_

9_se

q_9

RdP

u_9_

seq_

1R

dPu_

9_se

q_2

RdP

u_9_

seq_

3R

dPu_

9_se

q_4

RdP

u_9_

seq_

5R

dPu_

9_se

q_6

RdP

u_9_

seq_

7R

dPu_

9_se

q_8

RdP

u_9_

seq_

9

Red

s_9_

seq_

1R

eds_

9_se

q_2

Red

s_9_

seq_

3R

eds_

9_se

q_4

Red

s_9_

seq_

5R

eds_

9_se

q_6

Red

s_9_

seq_

7R

eds_

9_se

q_8

Red

s_9_

seq_

9

YlG

n_9_

seq_

1Yl

Gn_

9_se

q_2

YlG

n_9_

seq_

3Yl

Gn_

9_se

q_4

YlG

n_9_

seq_

5Yl

Gn_

9_se

q_6

YlG

n_9_

seq_

7Yl

Gn_

9_se

q_8

YlG

n_9_

seq_

9

YlG

nBu_

9_se

q_1

YlG

nBu_

9_se

q_2

YlG

nBu_

9_se

q_3

YlG

nBu_

9_se

q_4

YlG

nBu_

9_se

q_5

YlG

nBu_

9_se

q_6

YlG

nBu_

9_se

q_7

YlG

nBu_

9_se

q_8

YlG

nBu_

9_se

q_9

YlO

rBr_

9_se

q_1

YlO

rBr_

9_se

q_2

YlO

rBr_

9_se

q_3

YlO

rBr_

9_se

q_4

YlO

rBr_

9_se

q_5

YlO

rBr_

9_se

q_6

YlO

rBr_

9_se

q_7

YlO

rBr_

9_se

q_8

YlO

rBr_

9_se

q_9

YlO

rRd_

9_se

q_1

YlO

rRd_

9_se

q_2

YlO

rRd_

9_se

q_3

YlO

rRd_

9_se

q_4

YlO

rRd_

9_se

q_5

YlO

rRd_

9_se

q_6

YlO

rRd_

9_se

q_7

YlO

rRd_

9_se

q_8

YlO

rRd_

9_se

q_9

Figure 9: ColorBrewer sequential color schemes with 9 colors (continued from the schemes with3-8 colors in Figure 8). Each row of graphs represents a different family of color schemes, andeach column represents a different number of colors. The labels below the graphs represent thecolor names recognized by distruct.

13

Page 15: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

2.6 Formatting errors

As in structure, the program attempts to verify that the input files are correctly formatted andreports errors that it finds. The program exits if a serious “Error” is discovered. In some cases,problems are not serious, a “Note” or “Warning” is issued, and the program will execute. Theremay be circumstances in which the desired usage of the program produces notes or warnings.

Editing the files to be used in distruct may introduce hidden formatting characters at theends of lines or at the ends of files. Similarly to structure, this is one of the most frequentcauses of errors when input files otherwise seem to be correctly formatted. In UNIX systems,the dos2unix function can remove many of these characters.

3 Usage options

It is best to place distruct and all files needed for its execution in the same directory. Everytime distruct is run, it reads its instructions from the file drawparams. The format of this fileis analogous to the mainparams and extraparams files of structure. Each parameter is printedin all-caps in the file, preceded by the word “#define” (parameters are also printed in all-capsthroughout this document). The value is taken from the field that immediately follows theparameter name (for example “#define FONTHEIGHT 10” sets the font height to 10).

Following each parameter definition is a comment (marked “//”) that describes the parame-ter. The comment indicates what type of value is expected: “(str)”, for string (used for names ofinput and output files); “(int)”, for integer; “(d)”, for double (a real number - integers included);and “(B)”, for Boolean (1 for TRUE, 0 for FALSE).

The program is insensitive to the order of the parameters, so they can be rearranged. Thevalues of all parameters used for a given run are printed at the end of the output file. Severalof the parameters in drawparams can be changed from the command line (Section 3.3).

3.1 Data settings and main options

The main settings concern the input files, the amount of data, and the items to be printed.

INFILE POPQ (string) Name of input file for population Q-matrix (maximum length of 50characters or possibly less, depending on the operating system). This file is required.

INFILE INDIVQ (string) Name of input file for individual Q-matrix (maximum length of50 characters or possibly less, depending on the operating system). This file is required ifPRINT INDIVS=1.

INFILE LABEL ATOP (string) Name of input file for list of labels to be printed atop thefigure (maximum length of 50 characters or possibly less, depending on the operatingsystem). This file is optional, but is expected if PRINT LABEL ATOP=1.

INFILE LABEL BELOW (string) Name of input file for list of labels to be printed belowthe figure (maximum length of 50 characters or possibly less, depending on the operatingsystem). This file is optional, but is expected if PRINT LABEL BELOW=1.

14

Page 16: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

INFILE CLUST PERM (string) Name of input file for permutation of clusters and colorspecifications (maximum length of 50 characters or possibly less, depending on the oper-ating system). This file is optional.

OUTFILE (string) Name of output file (maximum length of 50 characters or possibly less,depending on the operating system). An existing file with this name will be overwritten.

K (int) Number of clusters. Maximum of 60.

NUMPOPS (int) Number of populations in population Q-matrix. Maximum of 5000.

NUMINDS (int) Number of individuals in individual Q-matrix. Maximum of 5000.

PRINT INDIVS (Boolean) 1 to plot the individual Q-matrix, 0 to plot the population Q-matrix.

PRINT LABEL ATOP (Boolean) 1 to print labels atop the figure. If INFILE LABEL ATOPcannot be found, the default is to print the population codes. If this is set to 0, the labelswill be printed as comments in the PostScript file.

PRINT LABEL BELOW (Boolean) 1 to print labels below the figure. If INFILE LABEL BELOWcannot be found, the default is to print the population codes. If this is set to 0, the labelswill be printed as comments in the PostScript file.

PRINT SEP (Boolean) 1 to print black vertical lines to separate the results for differentpopulations.

3.2 Figure appearance and additional options

Most of the following options control the figure appearance. The coordinate plane treats thelower-left corner as the origin; 1 unit is 1/72 inches.

FONTHEIGHT (double) The size of the font used for printing labels atop and below thefigure. The font is Helvetica-Bold.

DIST ABOVE (double) The distance above the figure at which to put beginnings of labels(labels are left-justified).

DIST BELOW (double) The distance below the figure at which to put ends of labels (labelsare right-justified).

BOXHEIGHT (double) The vertical height of the figure.

INDIVWIDTH (double) The width allotted to the results for each individual.

ORIENTATION (int) The orientation for the figure on the page. The default choice is 0,“horizontal orientation,” in which the figure is printed from left to right. In discussingitems “atop” and “below” the figure, this document assumes the default choice. If anotherorientation is desired, such as if the figure is too big to be displayed in a “portrait” mode,

15

Page 17: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

it is likely to be easiest to use the default orientation and to apply isometries to the figurein another application. There may be some exceptions: for example, if a PostScript figureconverted to PDF and is then cut and pasted from a PDF file to a Microsoft PowerPointpresentation, it may be difficult in some PowerPoint versions to rotate the figure once inPowerPoint. In this case it might be desirable to set ORIENTATION to 3, “reverse verticalorientation,” and rotate the figure in a PDF viewer before copying to PowerPoint. Otherpossibilities include 1 for “vertical orientation” and 2 for ”reverse horizontal orientation.”For orientation 0, a sensible choice for (XORIGIN, YORIGIN) is (72, 288); for 1, (360,72); for 2, (540, 504); for 3, (288, 720).

XORIGIN (double) The x-coordinate of the lower left corner of the figure.

YORIGIN (double) The y-coordinate of the lower left corner of the figure.

XSCALE (double) Dilation factor for the x-direction. This factor is applied to all aspects ofthe figure but does not affect the origin.

YSCALE (double) Dilation factor for the y-direction. This factor is applied to all aspects ofthe figure but does not affect the origin.

ANGLE LABEL ATOP (double) Angle in degrees at which to print the labels atop thefigure (in [0,180]).

ANGLE LABEL BELOW (double) Angle in degrees at which to print the labels below thefigure (in [0,180]).

LINEWIDTH RIM (double) The width of the line that comprises the border of the box.

LINEWIDTH SEP (double) The width of the lines that separate results for different popu-lations (relevant only if PRINT SEP is 1). This parameter should be small compared toINDIVWIDTH.

LINEWIDTH IND (double) The width of the lines used in printing the results. Results arefilled boxes, so the value of this parameter should not have any impact.

GRAYSCALE (Boolean) Set to 1 to make a grayscale figure instead of a color figure. If thisis 1, real numbers in [0,1] can be entered in INFILE CLUST PERM in place of the namesof colors. The default scheme is to use k/(K + 1) for the kth cluster.

ECHO DATA (Boolean) Set to 1 to print to the screen the first few and last few lines of thefiles INFILE POPQ and (if appropriate) INFILE INDIVQ.

REPRINT DATA (Boolean) Set to 1 to print the population Q-matrix (and the individualQ-matrix, if applicable) as a comment in the PostScript file.

PRINT INFILE NAME (Boolean) Set to 1 to print the name of INFILE POPQ above thefigure. This option is meant for use only with ORIENTATION=0.

PRINT COLOR BREWER (Boolean) Set to 1 to print the ColorBrewer settings in theoutput file. This option is required if using colors from ColorBrewer.

16

Page 18: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

3.3 Command-line arguments

Command-line flags enable the user to input certain parameters from the command line. Thevalues entered with all flags except ‘-d’ will overwrite the value in the drawparams file. The ‘-d’option enables use of a different parameter file in place of drawparams.

-d (drawparams) Read a different parameter input file instead of drawparams.

-K (K) Change the number of clusters.

-M (NUMPOPS) Change the number of predefined populations.

-N (NUMINDS) Change the number of individuals.

-p (input file) Read a different input file for the population Q-matrix.

-i (input file) Read a different input file for the individual Q-matrix.

-a (input file) Read a different input file for the labels to be printed atop the figure.

-b (input file) Read a different input file for the labels to be printed below the figure.

-c (input file) Read a different input file for the permutation of clusters and the colors.

-o (output file) Print results to a different output file.

The argument for a flag follows the flag and is separated from the flag by a space. The flagscan be used in any order. For example, to change the number of individuals to 317 and thelabels atop the figure to a file named continents, the appropriate command (in Unix) is:

./distruct -N 317 -a continents

If all parameters in drawparams are satisfactory, the program is called with ./distruct. If theprogram lies in a different directory from the current one, it will search for drawparams andinput files in the current directory. That is, self/distruct will search for input files in thepresent working directory rather than in the directory self. In Windows, the program is runmost easily by typing distruct from a Dos prompt, in a directory that contains the programand the input files.

4 Examples

Consider the files in Tables 1-5 with the default settings in the file drawparams. When we run./distruct, we obtain Figure 10. Note the slight differences from the figure that was shownfor the same data in Rosenberg et al. (2002). In Figure 10, the bottom-to-top order of theclusters was (5,4,1,2,3), while in Rosenberg et al. (2002) the order used was (1,2,3,4,5). Thefigure in Rosenberg et al. (2002) was smaller and did not print labels atop the figure.

Suppose that we wish to display only the population Q-matrix. We set PRINT INDIVS=0.We also remove the separators between populations (PRINT SEP=0). We then obtain Figure11. Additional examples using other data sets are shown in Figures 12 and 13.

17

Page 19: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Indo

-Eur

opea

n

Bal

ochi

Dra

vidi

an

Bra

hui

Indo

-Eur

opea

n

Mak

rani

Indo

-Eur

opea

n

Sind

hi

Indo

-Eur

opea

n

Path

an

Ling

uist

ic is

olat

e

Bur

usho

Indo

-Eur

opea

n

Haz

ara

Alta

ic

Uyg

ur

Indo

-Eur

opea

n

Kal

ash

Figure 10: Graph of individual Q-matrix in Table 2 using information from Tables 1, 3, 4, 5.

Indo

-Eur

opea

n

Bal

ochi

Dra

vidi

an

Bra

hui

Indo

-Eur

opea

n

Mak

rani

Indo

-Eur

opea

n

Sind

hi

Indo

-Eur

opea

n

Path

an

Ling

uist

ic is

olat

e

Bur

usho

Indo

-Eur

opea

n

Haz

ara

Alta

ic

Uyg

ur

Indo

-Eur

opea

n

Kal

ash

Figure 11: Graph of population Q-matrix in Table 1, using information from Tables 3, 4, 5.

Ban

tu

Afr

o-C

arib

bean

Ethi

opia

Nor

way

Ash

kena

zi

Arm

enia

Chi

na

Papu

a N

ew G

uine

a

Figure 12: Graph of Table 2 from Wilson et al. (2001). The default permutation (1,2,3,4)was used with the default colors. For these data, K = 4, NUMPOPS=8, and NUMINDS=352.INDIVWIDTH was set to 1.

18

Page 20: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Fayo

umi

4

Bed

ouin

5

Mar

ans

13

Icel

andi

c la

ndra

ce

16

Old

Sca

ndin

avia

n re

fere

nce

popu

latio

n

18

Jaer

hoen

s

19

Pado

vana

21

Tran

sylv

ania

n na

ked

neck

26

Gre

en-le

gged

par

trid

ge

27

Orlo

v

28

C li

ne

32

God

ollo

Nhx

33

Whi

te-e

gg la

yer l

ine

A

37

Bro

iler s

ire li

ne B

42

Bro

wn-

egg

laye

r lin

e C

44

Bro

wn-

egg

laye

r lin

e D

45

Bro

iler d

am li

ne D

50

Hig

h-A

b lin

e

51

Gal

lus

gallu

s ga

llus

102

Sarc

oma-

susc

eptib

le li

ne

3402

Figure 13: Graph of the structure run of highest estimated posterior probability among 100runs shown in Table 2 of Rosenberg et al. (2001). The default permutation was used with thedefault colors. Below the figure are breed codes and above the figure are breed names. K = 19,NUMPOPS=20, and NUMINDS=600. INDIVWIDTH was set to 0.7.

The distruct program has been designed to provide a display format for structure that isuseful for any value of K. Especially for small K (such as K = 2, 3), results might be bestdisplayed in various other forms not accommodated by distruct; some early examples from theliterature include Beaumont et al. (2001), Koskinen et al. (2002), and Pritchard et al.(2000a,b). At the same time, distruct may be useful in situations other than for the display ofpopulation structure; one such example is provided in Figure 7 of Conrad et al. (2006).

5 Frequently asked questions

Scenario 1: In the Windows version of distruct, I double click on the icon to run the program.A window pops up and immediately disappears.

Solution: The program opens a new window, runs, and closes the window upon completion.The output file will be created and will be placed in the appropriate directory. A more infor-mative way to run distruct is from a Dos prompt. Go to the Start Menu, click on Run, andtype cmd. Using cd, change directories to the directory where distruct is located, and then typedistruct. Alternatively, double click on the distruct.bat MS-Dos batch file instead of thedistruct.exe application. This command will open a window with a Dos prompt and will thenrun distruct in the window.

Scenario 2: In the Windows version of distruct, the PostScript output file is not recognized.What software do I need to view the output?

Solution: GhostView, http://pages.cs.wisc.edu/∼ghost, is free software that can viewPostScript files. Download both GSView and Ghostscript. Alternatively, programs such asAcrobat Distiller and Illustrator can read PostScript files.

19

Page 21: Distruct a program for the graphical display of population ... · Distruct: a program for the graphical display of population structure Noah A. Rosenberg 1 Center for Computational

Scenario 3: When opening the PostScript output file with a PostScript viewer, the page isblank. However, no error messages were produced when running distruct, and the size of theoutput file is nonzero.

Solution: Sometimes this problem arises from errors in the settings of the PostScript viewerthat change the size of the page. Try running distruct with smaller values of XORIGIN andYORIGIN, or converting the PostScript to PDF.

References

Beaumont, M., E. M. Barratt, D. Gottelli, A. C. Kitchener, M. J. Daniels, J. K.

Pritchard and M. W. Bruford, 2001 Genetic diversity and introgression in the Scottish wildcat.Mol. Ecol. 10: 319–336.

Brewer, C. A., G. W. Hatchard and M. A. Harrower, 2003 ColorBrewer in print: a catalogof color schemes for maps. Cartogr. Geogr. Inform. Sci. 30: 5–32.

Conrad, D. F., M. Jakobsson, G. Coop, X. Wen, J. D. Wall, N. A. Rosenberg and J. K.

Pritchard, 2006 A worldwide survey of haplotype variation and linkage disequilibrium in thehuman genome. Nature Genet. 38: 1251–1260.

Falush, D., M. Stephens and J. K. Pritchard, 2003 Inference of population structure usingmultilocus genotype data: Linked loci and correlated allele frequencies. Genetics 164: 1567–1587.

Harrower, M. A., and C. A. Brewer, 2003 ColorBrewer.org: an online tool for selecting colorschemes for maps. Cartogr. J. 40: 27–37.

Koskinen, M. T., P. Sundell, J. Piironen and C. R. Primmer, 2002 Genetic assessmentof spatiotemporal evolutionary relationships and stocking effects in grayling (Thymallus thymallus,Salmonidae). Ecol. Lett. 5: 193–205.

Pritchard, J. K., M. Stephens and P. Donnelly, 2000a Inference of population structure usingmultilocus genotype data. Genetics 155: 945–959.

Pritchard, J. K., M. Stephens, N. A. Rosenberg and P. Donnelly, 2000b Associationmapping in structured populations. Am. J. Hum. Genet. 67: 170–181.

Rosenberg, N. A., 2004 Distruct: a program for the graphical display of population structure. Mol.Ecol. Notes 4: 137–138.

Rosenberg, N. A., T. Burke, K. Elo, M. W. Feldman, P. J. Freidlin, M. A. M. Groenen,J. Hillel, A. Maki-Tanila, M. Tixier-Boichard, A. Vignal, K. Wimmers and S. Weigend,2001 Empirical evaluation of genetic clustering methods using multilocus genotypes from 20 chickenbreeds. Genetics 159: 699–713.

Rosenberg, N. A., J. K. Pritchard, J. L. Weber, H. M. Cann, K. K. Kidd, L. A. Zhiv-

otovsky and M. W. Feldman, 2002 Genetic structure of human populations. Science 298:

2381–2385.

Wilson, J. F., M. E. Weale, A. C. Smith, F. Gratrix, B. Fletcher, M. G. Thomas, N. Brad-

man and D. B. Goldstein, 2001 Population genetic structure of variable drug response. NatureGenet. 29: 265–269.

20