19524: Remove obsolete pca cmds.
[lightning.git] / plot.py
1 # Copyright (C) The Lightning Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 import csv
6 import numpy
7 import os
8 import os.path
9 import scipy
10 import sys
11
12 infile = sys.argv[1]
13 X = numpy.load(infile)
14
15 colors = None
16 if sys.argv[2]:
17     samples = []
18     labels = {}
19     with open(sys.argv[2], 'rt', newline='') as samplelist:
20         for row in csv.reader(samplelist):
21             sampleid = row[1]
22             samples.append(sampleid)
23     phenotype_column = int(sys.argv[4])
24     if os.path.isdir(sys.argv[3]):
25         phenotype_files = os.scandir(sys.argv[3])
26     else:
27         phenotype_files = [sys.argv[3]]
28     for phenotype_file in phenotype_files:
29         with open(phenotype_file, 'rt', newline='') as phenotype:
30             dialect = csv.Sniffer().sniff(phenotype.read(1024))
31             phenotype.seek(0)
32             for row in csv.reader(phenotype, dialect):
33                 tag = row[0]
34                 label = row[phenotype_column]
35                 for sampleid in samples:
36                     if tag in sampleid:
37                         labels[sampleid] = label
38     colors = []
39     labelcolors = {
40         'PUR': 'firebrick',
41         'CLM': 'firebrick',
42         'MXL': 'firebrick',
43         'PEL': 'firebrick',
44         '1': 'firebrick',
45         'TSI': 'green',
46         'IBS': 'green',
47         'CEU': 'green',
48         'GBR': 'green',
49         'FIN': 'green',
50         '2': 'green',
51         'LWK': 'coral',
52         'MSL': 'coral',
53         'GWD': 'coral',
54         'YRI': 'coral',
55         'ESN': 'coral',
56         'ACB': 'coral',
57         'ASW': 'coral',
58         '3': 'coral',
59         'KHV': 'royalblue',
60         'CDX': 'royalblue',
61         'CHS': 'royalblue',
62         'CHB': 'royalblue',
63         'JPT': 'royalblue',
64         '4': 'royalblue',
65         'STU': 'blueviolet',
66         'ITU': 'blueviolet',
67         'BEB': 'blueviolet',
68         'GIH': 'blueviolet',
69         'PJL': 'blueviolet',
70         '5': 'blueviolet',
71         '6': 'navy',
72     }
73     for sampleid in samples:
74         if (sampleid in labels) and (labels[sampleid] in labelcolors):
75             colors.append(labelcolors[labels[sampleid]])
76         else:
77             colors.append('black')
78
79 from matplotlib.figure import Figure
80 from matplotlib.patches import Polygon
81 from matplotlib.backends.backend_agg import FigureCanvasAgg
82 fig = Figure()
83 ax = fig.add_subplot(111)
84 ax.scatter(X[:,0], X[:,1], c=colors, s=60, marker='o', alpha=0.5)
85 canvas = FigureCanvasAgg(fig)
86 canvas.print_figure(sys.argv[5], dpi=80)