source: rotdif/bin/plot_2d_3d.py @ 1540

Last change on this file since 1540 was 1540, checked in by yuexi, 3 years ago

plot 2d 3d

  • Property svn:executable set to *
File size: 11.1 KB
Line 
1#!/usr/bin/python
2import os
3import glob
4import re
5import shutil
6import sys
7import subprocess
8import json
9import cStringIO
10import shlex 
11import socket
12import time
13import pty
14import select
15import atexit
16import signal
17import functools
18import itertools
19import math
20import pandas as pd
21import numpy as np
22
23from itertools import groupby
24from matplotlib import cm, colors
25
26from StringIO import StringIO
27from math import exp, expm1, log10, log, log1p
28from subprocess import Popen, PIPE, STDOUT
29
30##import our functions
31from preprocess_2d_3d import GetLabels, GetData_3d, GetData, FileNameArr
32
33def plot_2d_3d(color_list, exp_keys):
34    output_plot_2d_fit_upper = []
35    output_plot_2d_fit_lower = []
36    output_plot_2d_exp       = []
37    output_plot_2d_rexp      = []
38    labels                   = []
39    output_plot_3d_surface   = []
40    output_plot_3d_expp      = []
41    min_data_x = []
42    min_data_y = []
43    max_data_x = []
44    max_data_y = []
45    num_exp       = len(FileNameArr()[0])
46    num_fit_upper = len(FileNameArr()[1])
47    num_fit_lower = len(FileNameArr()[2])
48    # resizing
49    for i in range(num_exp):
50        output_plot_2d_exp.append([])
51        output_plot_2d_rexp.append([])
52        output_plot_3d_surface.append([])
53        output_plot_3d_expp.append([])
54    for i in range(num_fit_upper):
55        output_plot_2d_fit_upper.append([])
56    for i in range(num_fit_lower):
57        output_plot_2d_fit_lower.append([])
58
59#Exp - providing numbers of Exp, Fit and Labels sets ARE the same ...
60    for i in range(num_exp):
61        xExpArr = GetData(FileNameArr()[0][i])[0]
62        yExpArr = GetData(FileNameArr()[0][i])[1]
63        eExpArr = GetData(FileNameArr()[0][i])[2]   
64        rExpArr = GetData(FileNameArr()[0][i])[3]   
65        xFupArr = GetData(FileNameArr()[1][i])[0]
66        yFupArr = GetData(FileNameArr()[1][i])[1]
67        eFupArr = GetData(FileNameArr()[1][i])[2]   
68
69        xFloArr = GetData(FileNameArr()[2][i])[0]
70        yFloArr = GetData(FileNameArr()[2][i])[1]
71        eFloArr = GetData(FileNameArr()[2][i])[2] 
72
73        labels.append( GetLabels(FileNameArr()[3][i]) ) 
74
75        xExpArr_3d = GetData_3d(FileNameArr()[4][i])[0]
76        yExpArr_3d = GetData_3d(FileNameArr()[4][i])[1]
77        zExpArr_3d = GetData_3d(FileNameArr()[4][i])[2]   
78
79        xExpArr_3d_expp = GetData_3d(FileNameArr()[5][i])[0]
80        yExpArr_3d_expp = GetData_3d(FileNameArr()[5][i])[1]
81        zExpArr_3d_expp = GetData_3d(FileNameArr()[5][i])[2]   
82        #xFupArrsorted = xFupArr.sort()
83        #yFupArrsorted = yFupArr.sort()   
84        min_data_x.append( min(ii for ii in xFupArr ) )
85        min_data_y.append( min(ii for ii in yExpArr ) )
86        max_data_x.append( max(ii for ii in xFupArr ) )
87        max_data_y.append( max(ii for ii in yExpArr ) )
88       
89        numpoints_exp = len(xExpArr)
90        numpoints_fup = len(xFupArr)
91        numpoints_flo = len(xFloArr)
92           
93        for j in range(numpoints_exp):
94            output_plot_2d_exp[i].append([xExpArr[j],yExpArr[j],eExpArr[j]]) 
95            output_plot_2d_rexp[i].append([rExpArr[j]]) 
96        for j in range(numpoints_fup):
97            output_plot_2d_fit_upper[i].append([xFupArr[j],yFupArr[j]])     
98        for j in range(numpoints_fup):
99            output_plot_2d_fit_lower[i].append([xFloArr[j],yFloArr[j]]) 
100
101        output_plot_3d_surface[i].append(xExpArr_3d)
102        output_plot_3d_surface[i].append(yExpArr_3d)
103        output_plot_3d_surface[i].append(zExpArr_3d) 
104        output_plot_3d_expp[i].append(xExpArr_3d_expp)
105        output_plot_3d_expp[i].append(yExpArr_3d_expp)
106        output_plot_3d_expp[i].append(zExpArr_3d_expp) 
107   
108    min_x = min(min_data_x)
109    min_y = min(min_data_y)
110    max_x = max(max_data_x)
111    max_y = max(max_data_y)
112    min_y1 = float(min_y) - 0.2
113    max_y1 = float(max_y) + 0.2
114
115    xscale = ''
116    yscale = ''
117    data_2d = {
118        "options": 
119    {
120        "title"  : "Experimental ρ",
121        "ymin"   : min_y1,
122        "ymax"   : max_y1,
123        "xlabel" : "θ",
124        "ylabel" : "ρ(Exp.)",
125        "legend" :
126        {           
127            "position"            : "ne",
128            "margin"              : [-140, -1],
129            "backgroundColor"     : "null",
130            "labelBoxBorderColor" : "#000000",
131         },
132        "grid" : 
133        {
134            "backgroundColor" : "#ffffff",
135            "margin"    : 
136                              { 
137                                  "top"    : 0, 
138                                  "left"   : 0,
139                                  "bottom" : 0,
140                                  "right"  : 140
141                              }
142        },
143    },
144    "data": [ ]
145}
146
147
148## 3D with PLOTLY.JS ############################################################
149    data_3d = {
150    "layout" : {
151        "scene": {
152            "xaxis" : { 
153                "title"           : "Theta (Deg)",
154                "backgroundcolor" : "rgb(200, 200, 230)",
155                "gridcolor"       : "rgb(128, 128, 128)",
156                "showbackground"  : "true",
157                "zerolinecolor"   : "rgb(128, 128, 128)"
158            },
159            "yaxis" : { 
160                "title" : "Phi (Deg)",
161                "backgroundcolor" : "rgb(230, 200,230)",
162                "gridcolor"       : "rgb(128, 128, 128)",
163                "showbackground"  : "true",
164                "zerolinecolor"   : "rgb(128, 128, 128)",
165                "range"           : [-179, 180]
166            },
167            "zaxis" : { 
168                "title" : "Rho",
169                "backgroundcolor" : "rgb(230, 230,200)",
170                "gridcolor"       : "rgb(128, 128, 128)",
171                "showbackground"  : "true",
172                "zerolinecolor"   : "rgb(128, 128, 128)"
173            },
174            "camera": {
175                "center" : { "x": 0, "y": 0, "z": 0 }, 
176                "eye"    : { "x": 2, "y": 2, "z": 1 }, 
177                "up"     : { "x": 0, "y": 0, "z": 1 }
178            }
179        },
180        "showlegend" : "false",
181        "autosize" : "false",
182        "width" : 550,
183        "height": 550,
184        "margin": {
185         "l": 0,
186         "r": 0,
187         "b": 0,
188         "t": 0,
189         "pad": 4
190        },
191    },
192    "data"   : []
193}
194
195    for i in range(num_exp):
196        current_set_surf = {
197        "type"    :  "mesh3d",
198        "opacity" :  0.6,
199        "x"       :  output_plot_3d_surface[i][0],
200        "y"       :  output_plot_3d_surface[i][1],
201        "z"       :  output_plot_3d_surface[i][2],
202        "color"   :  color_list[i],
203        "showlegend" : False
204    }
205        data_3d['data'].append(current_set_surf)
206
207    for i in range(num_exp):
208   # print output_plot_3d_expp[i][0]
209   # exit();
210        current_set_3d_expp = {
211        "type"    :  "scatter3d",
212        "mode"    :  "markers",
213        "showlegend" : False,
214        "marker"  : {
215            "color"   : color_list[i],
216            "size"    : 2,
217            "symbol"  : 'square',
218            "line"    :  {
219                "color"  : "rgb(0,0,0)",
220                "width"  : 1.5 
221            },
222            "opacity" : 1.0
223        },
224        "opacity" :  1.0,
225        "x"       :  output_plot_3d_expp[i][0],
226        "y"       :  output_plot_3d_expp[i][1],
227        "z"       :  output_plot_3d_expp[i][2],
228        "color"   :  color_list[i],
229        "name"    :  labels[i]
230    }
231        data_3d['data'].append(current_set_3d_expp)
232## 3D with PLOTLY.JS ############################################################
233    data_3d = {
234    "layout" : {
235        "scene": {
236            "xaxis" : { 
237                "title"           : "Theta (Deg)",
238                "backgroundcolor" : "rgb(200, 200, 230)",
239                "gridcolor"       : "rgb(128, 128, 128)",
240                "showbackground"  : "true",
241                "zerolinecolor"   : "rgb(128, 128, 128)"
242            },
243            "yaxis" : { 
244                "title" : "Phi (Deg)",
245                "backgroundcolor" : "rgb(230, 200,230)",
246                "gridcolor"       : "rgb(128, 128, 128)",
247                "showbackground"  : "true",
248                "zerolinecolor"   : "rgb(128, 128, 128)",
249                "range"           : [-179, 180]
250            },
251            "zaxis" : { 
252                "title" : "Rho",
253                "backgroundcolor" : "rgb(230, 230,200)",
254                "gridcolor"       : "rgb(128, 128, 128)",
255                "showbackground"  : "true",
256                "zerolinecolor"   : "rgb(128, 128, 128)"
257            },
258            "camera": {
259                "center" : { "x": 0, "y": 0, "z": 0 }, 
260                "eye"    : { "x": 2, "y": 2, "z": 1 }, 
261                "up"     : { "x": 0, "y": 0, "z": 1 }
262            }
263        },
264        "showlegend" : "false",
265        "autosize" : "false",
266        "width" : 550,
267        "height": 550,
268        "margin": {
269         "l": 0,
270         "r": 0,
271         "b": 0,
272         "t": 0,
273         "pad": 4
274        },
275    },
276    "data"   : []
277}
278
279    for i in range(num_exp):
280        current_set_surf = {
281        "type"    :  "mesh3d",
282        "opacity" :  0.6,
283        "x"       :  output_plot_3d_surface[i][0],
284        "y"       :  output_plot_3d_surface[i][1],
285        "z"       :  output_plot_3d_surface[i][2],
286        "color"   :  color_list[i],
287        "showlegend" : False
288    }
289        data_3d['data'].append(current_set_surf)
290
291    for i in range(num_exp):
292        current_set_3d_expp = {
293        "type"    :  "scatter3d",
294        "mode"    :  "markers",
295        "showlegend" : False,
296        "marker"  : {
297            "color"   : color_list[i],
298            "size"    : 2,
299            "symbol"  : 'square',
300            "line"    :  {
301                "color"  : "rgb(0,0,0)",
302                "width"  : 1.5 
303            },
304            "opacity" : 1.0
305        },
306        "opacity" :  1.0,
307        "x"       :  output_plot_3d_expp[i][0],
308        "y"       :  output_plot_3d_expp[i][1],
309        "z"       :  output_plot_3d_expp[i][2],
310        "color"   :  color_list[i],
311        "name"    :  exp_keys[i]
312    }
313        data_3d['data'].append(current_set_3d_expp)
314### 2D ###########################################################
315
316    for i in range(num_exp):
317    #data_label = "Data" + str(i+1)
318        data_label = labels[i]
319        current_set_data = {
320        "points"  : { "show"      : "true", 
321                      "radius"    : 2,
322                      "errorbars" : "y", 
323                      "yerr"      : { "lowerCap" : "-",
324                                      "upperCap" : "-", 
325                                      "show"     : "true", 
326                                      #"color"    : "red",
327                                      "radius"   : 3 
328                                  }
329                  },
330        "label"  : data_label,
331        "data"   : output_plot_2d_exp[i],
332        "tooltips"  : output_plot_2d_rexp[i],
333        "color"  : color_list[i]
334    }
335        data_2d['data'].append(current_set_data)
336
337
338    for i in range(num_exp):
339        fit_label = "Fit" + str(i+1)
340        current_set_fit = {
341        "lines"  : { "show" : "true"  },
342        "data"   : output_plot_2d_fit_upper[i],
343        "color"  : color_list[i]
344    }
345        data_2d['data'].append(current_set_fit)
346 
347
348    for i in range(num_exp):
349        fit_label = "Fit" + str(i+1)
350        current_set_fit = {
351        "lines"  : { "show" : "true" },
352        "data"   : output_plot_2d_fit_lower[i],
353         "color"  : color_list[i]
354    }
355        data_2d['data'].append(current_set_fit)
356    return data_2d, data_3d
Note: See TracBrowser for help on using the repository browser.