source: experiments/frams/multi-threading/test-mt-plots.py @ 386

Last change on this file since 386 was 386, checked in by Maciej Komosinski, 7 years ago

Updated for Python 3 and new Framsticks message format

  • Property svn:eol-style set to native
File size: 3.2 KB
Line 
1import matplotlib.pyplot as plt
2from mpl_toolkits.mplot3d import axes3d
3import numpy as np
4import os
5import sys
6
7def wykres(threadsy,capacitiesy,wyniki,iteracje,atrybut):
8        kolory=['red','green','blue']
9        alfy=[0.1,0.1,0.8]
10        fig = plt.figure()
11        ax = fig.add_subplot(111, projection='3d')
12        ax.view_init(30,-150)
13        for i,iteracja in enumerate(iteracje):
14                X, Y = np.meshgrid(threadsy, capacitiesy) #X,Y are arrays of same size, 2D, with separated indexes
15                Z=np.empty(X.shape)
16                Z.fill(np.nan) #instead of nan, one could set -10 to clearly see on the plot which values are missing
17                for wynik in wyniki:
18                        threads,capacity,slownik=wynik
19                        if slownik['iter']==iteracja:
20                                print(threads,capacity,slownik[atrybut] if atrybut in slownik else np.nan)
21                                threadsindex=threadsy.index(threads)
22                                capacitiesindex=capacitiesy.index(capacity)
23                                Z[capacitiesindex,threadsindex]=slownik[atrybut] if atrybut in slownik else np.nan
24                print(Z)
25                ktore=len(kolory)-len(iteracje)+i
26                ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color=kolory[ktore], linewidth=1, alpha=alfy[ktore],edgecolor=(0,0,0,alfy[ktore]))
27        ax.set_xlabel('threads')
28        ax.set_ylabel('capacity')
29        ax.set_zlabel(atrybut)
30        ax.set_xticks(threadsy)
31        ax.set_yticks(capacitiesy)
32        ax.set_zlim((0,ax.get_zlim()[1])) #scale from (forced) zero to auto
33        plt.savefig("wykres_%d_%s.png" % (iteracja,atrybut))
34        #plt.show() #if you wanted to rotate the chart interactively
35        plt.close()
36
37       
38
39
40
41####################################################### main #######################################################
42
43threadsy=set() #used to store values of 'threads' that are in use. This is helpful because later a single multi-dimensional numpy array is used to keep all results
44capacitiesy=set() #used to store values of 'capacity' that are in use
45wyniki=[] #list of all results
46
47os.chdir(sys.argv[1]) #files with plots will also be created in that directory
48for plik in os.listdir('.'):
49        if plik.endswith(".out") and plik.count('_')==2:
50                podzielone=plik.replace('.','_').split('_')
51                threads=int(podzielone[1])
52                capacity=int(podzielone[2])
53                threadsy.add(threads)
54                capacitiesy.add(capacity)
55                plik = open("test_%d_%d.out" % (threads,capacity), "r") #should be the same name as the original file
56                slowniki = []
57                for linia in plik:
58                        linia=linia.strip()
59                        if linia.startswith("Script.Message: iter="):
60                                slownik={}
61                                for pole in linia.split(' '):
62                                        if '=' in pole:
63                                                pole=pole.strip(',')
64                                                pole=pole.split('=')
65                                                slownik[pole[0]]=float(pole[1])
66                                print(slownik)
67                                slowniki.append(slownik)
68                                wyniki.append((threads,capacity,slownik))
69                plik.close()
70
71threadsy=sorted(list(threadsy))
72capacitiesy=sorted(list(capacitiesy))
73print(threadsy)
74print(capacitiesy)
75
76wykres(threadsy,capacitiesy,wyniki,[3.0,6.0,9.0],'simsteps')
77wykres(threadsy,capacitiesy,wyniki,[3.0,6.0,9.0],'evals')
78wykres(threadsy,capacitiesy,wyniki,[3.0,6.0,9.0],'migrations')
79wykres(threadsy,capacitiesy,wyniki,[4.0,9.0],'fit_avg')
80wykres(threadsy,capacitiesy,wyniki,[4.0,9.0],'fit_max')
81
82#draws simple 2D plots of progress in consecutive iter's:
83#x=[]
84#y1=[]
85#y2=[]
86#for s in slowniki:
87#       x.append(s['iter'])
88#       y1.append(s['avg_fit'])
89#       y2.append(s['max_fit'])
90#plt.plot(x,y1)
91#plt.plot(x,y2)
92#plt.savefig("avg_%d_%d.png" % (threads,capacity))
93#plt.close()
94
Note: See TracBrowser for help on using the repository browser.