Skip to main content

A pedigree visualization tool based on dot format and visualized by graphviz

Project description

GraphPed

A novel graph-based visualization method for large and complex pedigrees

Author: Yin Huang

Citation:

Features

  • It can deal with complex families, wrong pedigrees, and multiple groups in a family.

  • It can help to check pedigrees.

  • It can show multiple traits or status in one pedigree.

  • It can show pedigrees in jupyter notebook and output as common image format (pdf, svg, png).

Install

pip install graphped

How to use

1. In command line

!GraphPed -h
usage: GraphPed [-h] [-p PED] [-o OUTPUT] [-f FORMAT] [-a ATTRIBUTES]
                [-e ENGINE]

The arguments of graphped

options:
  -h, --help            show this help message and exit
  -p PED, --ped PED     a ped file or an extended ped file (default: None)
  -o OUTPUT, --output OUTPUT
                        output folder (default: ./)
  -f FORMAT, --format FORMAT
                        the format of the output picture (default: svg)
  -a ATTRIBUTES, --attributes ATTRIBUTES
                        the attributes of the output picture (default: None)
  -e ENGINE, --engine ENGINE
                        the engine of graphviz rendering the output picture
                        (default: dot)
    1. standard pedigrees in the ped file
GraphPed -p data/example_fam.ped -o data/cli/ -f pdf
    1. extended pedigrees in the ped file
GraphPed -p data/example_fam_ext.ped -o data/cli/ -f svg -a data/default.yaml 

2.In jupyter notebook

from graphped.plot import *
fam=readped('data/example_fam.ped')
plotped(fam)

svg

Or

show(GraphPed(fam))

svg

GraphPed function can plot all the pedigrees in the fam dataframe.

Adding self-defined attributes. the number of traits in the input file should match with the number of traits in the attribute yaml file.

attrs=load_attributes('data/default.yaml')
famext=readped('data/example_fam_ext.ped',attrs)
plotped(famext,attrs)

svg

Write to output folder with pdf format

plotped(famext,attrs,output='data/jpn',format='pdf')

Or output multiple pedigrees.

GraphPed(famext,attrs,output='data/jpn',format='pdf')

Tutorial

Setting the attribute yaml file

For one trait ped file, if the trait values are affected status, which should be coded as follows: -9 or 0 is missing,1 is unaffected, and 2 is affected. you don't need to set the attribute file. Otherwise, you need to set your attribute file by following:

The format of the attribute of yaml file

trait name:
    attribute name:
        (the pairs of tait value and attribute value)
        tait value1: attribute value1
        tait value2: attribute value2
        ...

If you have more than one traits, you need to set each trait separately in the yaml file. The following is an example.

%%writefile data/default.yaml

trait1:
    fillcolor:
        1: 'white'
        2: 'dimgrey'
        -9: 'aquamarine3'

trait2:
    style:
        True: filled,setlinewidth(4)
        False: filled
    

trait3:
    fontcolor:
        True: darkorange
        False: black
    
Overwriting data/default.yaml
attrs=load_attributes('data/default.yaml')
attrs
{'trait1': {'fillcolor': {1: 'white', 2: 'dimgrey', -9: 'aquamarine3'}},
 'trait2': {'style': {True: 'filled,setlinewidth(4)', False: 'filled'}},
 'trait3': {'fontcolor': {True: 'darkorange', False: 'black'}}}

Two example pedigrees

one is standard, one is extended with 3 traits.

Standard ped file

%%writefile data/example_fam.ped
Fam	F4	P3	F1	1	1
Fam	F3	P3	F1	2	1
Fam	F2	P3	F1	2	1
Fam	F1	P1	P2	2	2
Fam	P3	0	0	1	2
Fam	P1	0	0	1	-9
Fam	P2	0	0	2	-9
Overwriting data/example_fam.ped
fam=readped('data/example_fam.ped')
fam
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
fid iid fathid mothid sex trait
0 Fam F4 P3 F1 1 1
1 Fam F3 P3 F1 2 1
2 Fam F2 P3 F1 2 1
3 Fam F1 P1 P2 2 2
4 Fam P3 0 0 1 2
5 Fam P1 0 0 1 -9
6 Fam P2 0 0 2 -9
plotped(fam)

svg

plotped(fam)

svg

Extended ped file

%%writefile data/example_fam_ext.ped
Fam1	F4	P3	F1	1	1	True	False
Fam1	F3	P3	F1	2	1	True	True
Fam1	F2	P3	F1	2	1	True	False
Fam1	F1	P1	P2	2	2	True	False
Fam1	P3	0	0	1	2	True	False
Fam1	P1	0	0	1	-9	False	True
Fam1	P2	0	0	2	-9	False	True
Overwriting data/example_fam_ext.ped
famext=readped('data/example_fam_ext.ped',attrs)
famext
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
fid iid fathid mothid sex trait1 trait2 trait3
0 Fam1 F4 P3 F1 1 1 True False
1 Fam1 F3 P3 F1 2 1 True True
2 Fam1 F2 P3 F1 2 1 True False
3 Fam1 F1 P1 P2 2 2 True False
4 Fam1 P3 0 0 1 2 True False
5 Fam1 P1 0 0 1 -9 False True
6 Fam1 P2 0 0 2 -9 False True
plotped(famext,attrs)

svg

dots=GraphPed(fam)
show(dots)

svg

Write out plots

plotped(fam,output='data/exampleplots',format='png')

Show the plot from data/exampleplots/Fam.png

data/exampleplots/Fam.png

Real data examples

all_fam=readped('data/Fig_2_3_fam.ped')
all_fam
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
fid iid fathid mothid sex trait
0 25_2 25_2_33 25_2_49 25_2_50 2 2
1 25_2 25_2_28c1 0 0 2 1
2 25_2 25_2_25 25_2_49 25_2_50 1 2
3 25_2 25_2_28 0 0 1 2
4 25_2 25_2_29 25_2_49 25_2_50 2 2
... ... ... ... ... ... ...
401 10R_R99 10R_R99_22 10R_R99_29 10R_R99_15 1 1
402 10R_R99 10R_R99_29 0 0 1 2
403 10R_R99 10R_R99_7 0 0 2 2
404 10R_R99 10R_R99_8 0 0 1 1
405 10R_R99 10R_R99_8 10R_R99_19 10R_R99_5 2 1

406 rows × 6 columns

Fig.1 The workflow of GraphPed

show workflow

Fig.2 The pedigrees of complex families

plotped(all_fam[all_fam.fid=='25_2'])

svg

Fig.S2 The largest pedigree in ADSP

plotped(all_fam[all_fam.fid=='4_649'])

svg

Fig.3 The pedigrees with incorrect information

plotped(all_fam[all_fam.fid=='10R_R99'])

svg

Fig.4 The pedigrees with multiple phenotypes

self-defined multiple-trait yaml

%%writefile data/self_defined_mutiple_traits.yaml

ad:
    fillcolor:
        1: 'white'
        2: 'dimgrey'
        -9: 'aquamarine3'

vcf:
    style:
        True: filled,setlinewidth(4)
        False: filled
    

trim:
    fontcolor:
        True: darkorange
        False: black
    
Writing data/self_defined_mutiple_traits.yaml
attrs=load_attributes('data/self_defined_mutiple_traits.yaml')
ped=readped('data/Fig4_fam_ext.ped',attrs)
ped
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
fid iid fathid mothid sex ad vcf trim
0 10R_R99 10R_R99_10 10R_R99_2 10R_R99_1 2 1 True False
1 10R_R99 10R_R99_19 10R_R99_2 10R_R99_1 1 1 True False
2 10R_R99 10R_R99_20 10R_R99_2 10R_R99_1 1 1 False False
3 10R_R99 10R_R99_21 10R_R99_2 10R_R99_1 1 1 False False
4 10R_R99 10R_R99_17 10R_R99_29 10R_R99_15 1 1 True False
5 10R_R99 10R_R99_22 10R_R99_29 10R_R99_15 1 1 False False
6 10R_R99 10R_R99_15 10R_R99_8 10R_R99_7 2 2 True False
7 10R_R99 10R_R99_12 10R_R99_8 10R_R99_7 2 2 True False
8 10R_R99 10R_R99_1 10R_R99_8 10R_R99_7 2 2 True False
9 10R_R99 10R_R99_5 10R_R99_8 10R_R99_7 1 1 True False
10 10R_R99 10R_R99_6 10R_R99_8 10R_R99_7 2 1 True False
11 10R_R99 10R_R99_2 0 0 1 -9 False False
12 10R_R99 10R_R99_29 0 0 1 2 False False
13 10R_R99 10R_R99_7 0 0 2 2 False False
14 10R_R99 10R_R99_8 0 0 1 1 False False
plotped(ped,attrs)

svg

Show multiple figures with self-defined attributes

self-defined single-trait yaml

%%writefile data/self_defined_single_trait.yaml

ad:
    fillcolor:
        1: 'white'
        2: 'dimgrey'
        -9: 'aquamarine3'
Writing data/self_defined_single_trait.yaml
attr=load_attributes('data/self_defined_single_trait.yaml')
all_fam=readped('data/Fig_2_3_fam.ped',attr)
all_fam
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
fid iid fathid mothid sex ad
0 25_2 25_2_33 25_2_49 25_2_50 2 2
1 25_2 25_2_28c1 0 0 2 1
2 25_2 25_2_25 25_2_49 25_2_50 1 2
3 25_2 25_2_28 0 0 1 2
4 25_2 25_2_29 25_2_49 25_2_50 2 2
... ... ... ... ... ... ...
401 10R_R99 10R_R99_22 10R_R99_29 10R_R99_15 1 1
402 10R_R99 10R_R99_29 0 0 1 2
403 10R_R99 10R_R99_7 0 0 2 2
404 10R_R99 10R_R99_8 0 0 1 1
405 10R_R99 10R_R99_8 10R_R99_19 10R_R99_5 2 1

406 rows × 6 columns

dots=GraphPed(all_fam,attr)
show(dots)

svg

svg

svg

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

GraphPed-0.0.5.tar.gz (16.6 kB view hashes)

Uploaded Source

Built Distribution

GraphPed-0.0.5-py3-none-any.whl (11.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page