tomwalters@100
|
1 #!/usr/bin/env python
|
tomwalters@100
|
2 """
|
tomwalters@100
|
3 spider_plot.py
|
tomwalters@100
|
4
|
tomwalters@100
|
5 Created by Thomas Walters on 2010-09-12.
|
tomwalters@100
|
6 """
|
tomwalters@100
|
7
|
tomwalters@101
|
8 import sys
|
tomwalters@101
|
9 import getopt
|
tomwalters@100
|
10 import numpy as np
|
tomwalters@100
|
11 import pylab as p
|
tomwalters@100
|
12 import mpl_toolkits.mplot3d.axes3d as p3
|
tomwalters@100
|
13 import matplotlib as mpl
|
tomwalters@100
|
14 from matplotlib import cm
|
tomwalters@100
|
15 import matplotlib.ticker as ticker
|
tomwalters@100
|
16
|
tomwalters@101
|
17 help_message = '''
|
tomwalters@101
|
18 Plot the spider.
|
tomwalters@100
|
19
|
tomwalters@101
|
20 Arguments:
|
tomwalters@101
|
21 -i --input_file
|
tomwalters@101
|
22 -o --output_file
|
tomwalters@101
|
23 '''
|
tomwalters@100
|
24
|
tomwalters@101
|
25 class Usage(Exception):
|
tomwalters@101
|
26 def __init__(self, msg):
|
tomwalters@101
|
27 self.msg = msg
|
tomwalters@100
|
28
|
tomwalters@100
|
29
|
tomwalters@101
|
30 def main(argv=None):
|
tomwalters@101
|
31 if argv is None:
|
tomwalters@101
|
32 argv = sys.argv
|
tomwalters@101
|
33 try:
|
tomwalters@101
|
34 try:
|
tomwalters@101
|
35 opts, args = getopt.getopt(argv[1:], "hi:o:",
|
tomwalters@101
|
36 ["help", "input_file=", "output_file="])
|
tomwalters@101
|
37 except getopt.error, msg:
|
tomwalters@101
|
38 raise Usage(msg)
|
tomwalters@101
|
39
|
tomwalters@101
|
40 # defaults
|
tomwalters@101
|
41 input_file = "results_iteration_15.txt"
|
tomwalters@101
|
42 output_filename = "results_iteration_15.png"
|
tomwalters@101
|
43
|
tomwalters@101
|
44 # option processing
|
tomwalters@101
|
45 for option, value in opts:
|
tomwalters@101
|
46 if option in ("-h", "--help"):
|
tomwalters@101
|
47 raise Usage(help_message)
|
tomwalters@101
|
48 if option in ("-i", "--input_file"):
|
tomwalters@101
|
49 input_file = value
|
tomwalters@101
|
50 if option in ("-o", "--output_file"):
|
tomwalters@101
|
51 output_file = value
|
tomwalters@101
|
52
|
tomwalters@101
|
53 except Usage, err:
|
tomwalters@101
|
54 print >> sys.stderr, sys.argv[0].split("/")[-1] + ": " + str(err.msg)
|
tomwalters@101
|
55 print >> sys.stderr, "\t for help use --help"
|
tomwalters@101
|
56 return 2
|
tomwalters@100
|
57
|
tomwalters@101
|
58 # Read in a file with lines in the form
|
tomwalters@101
|
59 # Pitch Scale Percentage
|
tomwalters@101
|
60 xs=[]
|
tomwalters@101
|
61 ys=[]
|
tomwalters@101
|
62 zs=[]
|
tomwalters@101
|
63 f = open(input_file, 'r')
|
tomwalters@101
|
64 for line in f:
|
tomwalters@101
|
65 if line[0] != "#":
|
tomwalters@101
|
66 values = line.strip().split(' ')
|
tomwalters@101
|
67 xs.append(central_vtl*central_vtl_scaling/float(values[1]))
|
tomwalters@101
|
68 ys.append(float(values[0]))
|
tomwalters@101
|
69 zs.append(float(values[2]))
|
tomwalters@100
|
70
|
tomwalters@100
|
71
|
tomwalters@101
|
72 # Define a tiny sphere, centered on the origin, which
|
tomwalters@101
|
73 # we'll shift to the desired position.
|
tomwalters@101
|
74 u=np.r_[0:2*np.pi:50j]
|
tomwalters@101
|
75 v=np.r_[0:np.pi:50j]
|
tomwalters@101
|
76 sx=0.01*np.outer(np.cos(u),np.sin(v))
|
tomwalters@101
|
77 sy=0.01*np.outer(np.sin(u),np.sin(v))
|
tomwalters@101
|
78 sz=2.5*np.outer(np.ones(np.size(u)),np.cos(v))
|
tomwalters@100
|
79
|
tomwalters@101
|
80 fig=p.figure()
|
tomwalters@101
|
81 ax = p3.Axes3D(fig, azim=-80, elev=60)
|
tomwalters@100
|
82
|
tomwalters@101
|
83 colormap = cm.get_cmap('jet', 100)
|
tomwalters@100
|
84
|
tomwalters@101
|
85 # Note: here I fake out the lack of proper logarihmic scales on 3D axes in
|
tomwalters@101
|
86 # matplotlib by just plotting log values on a linear scale and renaming
|
tomwalters@101
|
87 # the labels.
|
tomwalters@101
|
88 # (This doesn't work: ax.w_yaxis.set_scale('log') ax.w_xaxis.set_scale('log'))
|
tomwalters@100
|
89
|
tomwalters@101
|
90 # Plot the values seven at a time as dark lines.
|
tomwalters@101
|
91 # These are the individual spokes of the spoke pattern.
|
tomwalters@101
|
92 n=7
|
tomwalters@101
|
93 for i in xrange(0,8):
|
tomwalters@101
|
94 ax.plot(np.log(xs[i*n:(i+1)*n]), np.log(ys[i*n:(i+1)*n]), zs[i*n:(i+1)*n], color=[0,0,0])
|
tomwalters@100
|
95
|
tomwalters@101
|
96 for x,y,z in zip(xs,ys,zs):
|
tomwalters@101
|
97 ax.plot(np.log([x, x]), np.log([y, y]), [z, 0], color=[0.8,0.8,0.8])
|
tomwalters@101
|
98 ax.plot_surface(sx+np.log(x),sy+np.log(y),sz+z, color=colormap(int(z)), linewidth=0)
|
tomwalters@100
|
99
|
tomwalters@101
|
100 ax.set_ylabel('GPR/Hz')
|
tomwalters@101
|
101 ax.set_xlabel('VTL/cm')
|
tomwalters@101
|
102 ax.set_zlabel('Percent correct')
|
tomwalters@101
|
103 ax.set_ylim3d(np.log([131,225]))
|
tomwalters@101
|
104 ax.set_xlim3d(np.log([9.9, 22.1]))
|
tomwalters@101
|
105 ax.set_zlim3d([-1, 101])
|
tomwalters@101
|
106 ax.w_zaxis.set_major_locator(ticker.FixedLocator([0, 20, 40, 60, 80, 100]))
|
tomwalters@100
|
107
|
tomwalters@101
|
108 ax.w_xaxis.set_major_locator(ticker.FixedLocator(np.log([10,15,22])))
|
tomwalters@101
|
109 ax.w_xaxis.set_ticklabels(['10', '15', '22'])
|
tomwalters@101
|
110 ax.w_yaxis.set_major_locator(ticker.FixedLocator(np.log([132, 172, 224])))
|
tomwalters@101
|
111 ax.w_yaxis.set_ticklabels(['132', '172', '224'])
|
tomwalters@100
|
112
|
tomwalters@101
|
113 #for a in ax.w_xaxis.get_ticklines()+ax.w_xaxis.get_ticklabels():
|
tomwalters@101
|
114 # a.set_visible(False)
|
tomwalters@100
|
115
|
tomwalters@101
|
116 #for a in ax.w_yaxis.get_ticklines()+ax.w_yaxis.get_ticklabels():
|
tomwalters@101
|
117 # a.set_visible(False)
|
tomwalters@101
|
118
|
tomwalters@101
|
119
|
tomwalters@101
|
120 #p.show()
|
tomwalters@101
|
121 p.savefig(output_filename)
|
tomwalters@101
|
122
|