plot_ik_grid.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 """
4 Visualize csv file of ik-grid in 2d heatmap
5 """
6 import matplotlib.pyplot as plt
7 import sys
8 import csv
9 from itertools import chain
10 import numpy as np
11 import math
12 
13 csvfile = sys.argv[1]
14 if len(sys.argv) == 3:
15  image_file = sys.argv[2]
16 else:
17  image_file = None
18 
19 
20 data_by_k = dict()
21 # read data from csv file
22 with open(csvfile) as f:
23  reader = csv.reader(f)
24  index = reader.next()
25  # x, y, z, i, j, k. value
26  x_index = index.index("x")
27  y_index = index.index("y")
28  z_index = index.index("z")
29  i_index = index.index("i")
30  j_index = index.index("j")
31  k_index = index.index("k")
32  value_index = index.index("value")
33  for row in reader:
34  (x, y, z, i, j, k, value) = [float(row[x_index]),
35  float(row[y_index]),
36  float(row[z_index]),
37  int(row[i_index]),
38  int(row[j_index]),
39  int(row[k_index]),
40  float(row[value_index])]
41  data = {"x": x,
42  "y": y,
43  "z": z,
44  "i": i,
45  "j": j,
46  "k": k,
47  "value": value}
48  if data_by_k.has_key(k):
49  data_by_k[k].append(data)
50  else:
51  data_by_k[k] = [data]
52 k_num = len(data_by_k.keys())
53 
54 # print "{0} k values".format(k_num)
55 
56 # Estimating grid size
57 z_values = np.array(list(chain.from_iterable([[data["z"] for data in data_array]
58  for data_array in data_by_k.values()])))
59 min_z = np.amin(z_values)
60 max_z = np.amax(z_values)
61 # print "z value from {0} to {1}".format(min_z, max_z)
62 step = (max_z - min_z) / (k_num - 1)
63 # print "estimated step is", step
64 
65 fig, axes = plt.subplots(int(math.ceil(k_num / 3)), 3)
66 images = dict()
67 non_zero_counter = 0
68 for k, counter in zip(data_by_k, range(k_num)): # need to sort by k?
69  data_array = data_by_k[k]
70  i_s = sorted(set([data["i"] for data in data_array]))
71  j_s = sorted(set([data["j"] for data in data_array]))
72  xnum = len(i_s)
73  ynum = len(j_s)
74  min_i = min([data["i"] for data in data_array])
75  min_j = min([data["j"] for data in data_array])
76  min_value = min([data["value"] for data in data_array])
77  max_value = max([data["value"] for data in data_array])
78  min_x = min([data["x"] for data in data_array])
79  max_x = max([data["x"] for data in data_array])
80  min_y = min([data["y"] for data in data_array])
81  max_y = max([data["y"] for data in data_array])
82  # print "{0}-{1}".format(xnum, ynum)
83  image = np.arange(0, xnum * ynum, 1.0).reshape((xnum, ynum))
84  for data in data_array:
85  i = data["i"]
86  j = data["j"]
87  image[i - min_i][j - min_j] = data["value"]
88  if data["value"] != 0:
89  non_zero_counter = non_zero_counter + 1
90  images[k] = image
91  ax = axes.flat[counter]
92  # print "x: {0} - {1}".format(min_x, max_x)
93  # print "y: {0} - {1}".format(min_y, max_y)
94  # ax.set_xticklabels([i * istep + min_x for i in range(xnum-1)])
95  ax.set_title("$z = {0}$mm".format(data_array[0]["z"]))
96  ax.set_xlabel("$x$ [mm]")
97  ax.set_ylabel("$y$ [mm]")
98  ax.tick_params(labelsize=8)
99  im = ax.imshow(image, vmin=min_value, vmax=max_value, cmap="gnuplot", interpolation="none",
100  aspect="auto",
101  extent=[min_x-step/2, max_x+step/2, min_y-step/2, max_y+step/2])
102 # cbar_ax = fig.add_axes([0.95, 0.15, 0.01, 0.7])
103 # cb = fig.colorbar(im, cax=cbar_ax)
104 print("{0} reached regions".format(non_zero_counter))
105 fig.suptitle("{0} reached regions".format(non_zero_counter), fontsize=8)
106 plt.tight_layout()
107 
108 if image_file:
109  plt.savefig(image_file)
110 else:
111  plt.show()


jsk_ik_server
Author(s): furuta
autogenerated on Fri May 14 2021 02:52:06