about summary refs log tree commit diff
path: root/sourcecodes/violin_plotly.py
blob: b2c9cadaf766b49281a0ead477ebe26e34e48f34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/home/jziebart/python/Python-2.7.15/python
import os
import sys
import math
#sys.path.append('/home/jziebart/.local/bin')
#sys.path.append('/home/jziebart/.local/lib')

import plotly
import plotly.graph_objs as go
import csv
import string

def mean_stdev(y):
    mean = sum(y)
    mean = sum(y)/len(y)
    stdev = 0
    for yi in y:
        stdev = stdev + (yi - mean)**2
    stdev = stdev/(len(y)-1)
    stdev = math.sqrt(stdev)
    return mean,stdev;

def standardize(y):
    mean,stdev = mean_stdev(y)
    ystd = []
    for yi in y:
        yi = (yi - mean)/stdev
        ystd.append(yi)
    return ystd


netID = sys.argv[-1]
outfile = netID+"violin_plotly.html"

 
filename=netID+"continuous_input.txt"
f=open(filename,"r")
#Read the first line to get the variable names
line=f.readline()
line = map(string.strip,line.strip().split("\t"))
varNames = line
line=f.readline()
line = map(string.strip,line.strip().split("\t"))
for i in range(len(line)):
    line[i] = int(line[i])
cd_types = line
cNames = []
for i in range(len(varNames)):
    if cd_types[i] == 1:
        cNames.append(varNames[i])

#Read in original data
data = []
line = f.readline()
while line:
    line = map(string.strip,line.strip().split("\t"))
    temp = []
    for i in range(len(varNames)):
        if cd_types[i] == 1:
            temp.append(float(line[i]))
    data.append(temp)
    line = f.readline()

#Read in data for violin plots
filename2=netID+"violin_orig.txt"
f2=open(filename2,"r")
line = f2.readline()
pdf_data = []
while line:
    line = line.strip()
    if line == "Data for new node":
        line = f2.readline()
        pdf_data.append([line.strip()])
    else:
        pdf_data[-1].append(float(line.strip()))
    line = f2.readline()

pdf_data2 = []
for i in range(len(cNames)):
    for j in range(len(pdf_data)):
        if cNames[i] == pdf_data[j][0]:
            pdf_data2.append(pdf_data[j][1:])

del pdf_data

layout = go.Layout(
    title="<br>Original distributions",
    titlefont=dict(
        family='Arial, sans-serif',
        size=24,
        color='black'
        ),
    yaxis=dict(title="Distributions of standardized data"),
    legend=dict(orientation='h'),
    margin=dict(t=10,l=70,b=40)
)
fig = go.Figure(layout=layout)

for i in range(len(cNames)):
    y = []
    for j in range(len(data)):
        y.append(data[j][i])
    y_stand = standardize(y)
    #Add traces to violin plot
    if i == 1:
        fig.add_trace(go.Violin(y=y_stand,x0=cNames[i],side='negative',legendgroup='Data',name='Fit to data',fillcolor='blue',line=dict(color='blue'),hoverinfo='none',points='all',scalegroup=cNames[i]))
        fig.add_trace(go.Violin(y=pdf_data2[i],x0=cNames[i],side='positive',legendgroup='Network parameters',name='Network parameters',fillcolor='orange',line=dict(color='orange'),hoverinfo='none',points=False,scalegroup=cNames[i]))
    else:
        fig.add_trace(go.Violin(y=y_stand,x0=cNames[i],side='negative',legendgroup='Data',name='Data',fillcolor='blue',line=dict(color='blue'),showlegend=False,hoverinfo='none',points='all',scalegroup=cNames[i]))
        fig.add_trace(go.Violin(y=pdf_data2[i],x0=cNames[i],side='positive',legendgroup='Network parameters',name='Network parameters',fillcolor='orange',line=dict(color='orange'),showlegend=False,hoverinfo='none',points=False,scalegroup=cNames[i]))


plotly.offline.plot(fig,filename=outfile)