Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from matplotlib import pyplot as plt
- import numpy as np
- import os
- from glob import glob
- import csv
- import matplotlib.cm as cm
- from collections import OrderedDict
- import ast
- import re
- import fnmatch
- # data decription for plot titles
- dataSetName = "ScavengeTroph2017-05-28_"
- plot_title = "UT60LT30"
- '''
- # the path to the data from where the current file is saved
- dirname = os.path.abspath(os.path.join(
- os.path.dirname( __file__ ),
- '../../../..',
- "self_energy_robot"
- + "/" + "steptaken_infinitefood"
- ))
- path = dirname + "/" + dataSetName
- #print(path)
- extension = "*Summary.csv"
- files = []
- for dir,_,_ in os.walk(path):
- files.extend(glob(os.path.join(dir,extension)))
- '''
- data_to_import = ['n_food_cells_initial',
- 'total_area_covered',
- 'n_bots']
- # ->
- # 1 for Default avg area plot
- # 2 for Normalised area plot (Avg / (food/bots))
- drawY = 2
- # ->
- # 0 don't draw error bars
- # 1 draw error bars
- drawError = 1
- data = {}
- for _data in data_to_import:
- data[_data] = []
- #UTfolder = ['No_Trophallaxis','Trophallaxis_generous', 'Th50', 'Th70', 'Th90']
- #UTfolder = ['UT90LT40', 'UT90LT40_more']
- path = []
- #testNumber = 'Troph_Th_average'
- testNumber = 'test9'
- UTfolder = ['UT60LT30']
- #UTfolder = ['No_Trophallaxis','Trophallaxis_generous', 'Th50','Th70','Th90',]
- trophFolder = 'test9FiniteTroph'
- #cwd='/Users/ammacpro1/AnacondaProjects/self_energy_robot/'+testNumber+'/'+UTfolder+'/'+trophFolder
- cwd='/Users/ammacpro1/simulation_results/self_energy_robot/'+testNumber
- #cwd='/Users/ammacpro1/AnacondaProjects/result_increase_initial_energy/'+testNumber
- #cwd = os.getcwd()
- for f in UTfolder:
- path.append(cwd+'/'+f+'/'+trophFolder+'/Bot*/*Summary.csv')
- #init_food_per_groups = [32, 40, 48, 56, 64]
- #
- fig, ax = plt.subplots()
- def analyseFolders(folder, curr_p, drawY, drawError):
- files = glob(folder)
- for file in files:
- with open(file, 'rt') as f:
- reader = csv.reader(f, delimiter=',')
- for row in reader:
- for _data in data_to_import:
- if row[0] in [_data]:
- data[_data].append(row[1])
- sorted_data = dict.fromkeys(data.keys(),[])
- data_to_plot = {}
- keys = [key for key, value in data.items()]
- #print(keys)
- foodPatchSize = sorted(list(set(data["n_food_cells_initial"])), key=int)
- swarmSize = sorted(list(set(data["n_bots"])), key=int)
- for PSize in foodPatchSize:
- for SSize in swarmSize:
- for _data in [key for key, value in data.items()]:
- #print(PSize, _data)
- data_to_plot[_data + "_food" + PSize + "_bots" + SSize] = \
- [float(i)
- for i, j, k in zip(
- data[_data],
- data["n_bots"],
- data["n_food_cells_initial"])
- if j == SSize and k == PSize]
- #print(data_to_plot)
- #colors = iter(cm.Greys(np.linspace(0.4, 1, len(foodPatchSize))))
- colors = cm.rainbow(np.linspace(0.4, 1, len(UTfolder)))
- widths = np.linspace(2, 0.5, len(UTfolder))
- #fig, ax = plt.subplots()
- data_dict = {k:v for (k,v) in data_to_plot.items() if _data in k}
- Markers = ['+','+','o','o','o','^','o','p','s']
- LineStyles = ['--','--','-','-','-','-.',':','--']
- #MarkerIndex = 0;
- data_mean = []
- data_sd = []
- for PSize in foodPatchSize:
- c = colors[curr_p]
- w = widths[curr_p]
- food_dict = {k: v for (k, v) in data_dict.items() if PSize in k}
- vals = []
- sd = []
- vals = np.mean(data_to_plot["total_area_covered_food" + PSize + "_bots" + SSize])
- if (drawY == 2):
- vals /= (int(PSize)/int(SSize))
- if (drawError):
- sd = np.std(data_to_plot["total_area_covered_food" + PSize + "_bots" + SSize])
- else:
- sd = 0
- data_mean.append(vals)
- data_sd.append(sd)
- foodPatchSize = [int(x) for x in foodPatchSize]
- ax.errorbar(foodPatchSize,
- data_mean,
- data_sd,
- #sd, fmt = 'o',
- capsize = 2,
- linestyle = LineStyles[curr_p % len(LineStyles)],
- #linestyle = "None",
- linewidth = w,
- marker = Markers[curr_p % len(Markers)],
- #marker='o',
- color=c,
- #label="Number of food patches = " + str(PSize))
- label=UTfolder[curr_p])
- ax.legend(frameon=False, loc="best", prop={'size': 10})
- ax.set_xlabel("Food Boundary Offset")
- if (drawY == 1):
- ax.set_ylabel("Average Area Covered")
- elif (drawY == 2):
- ax.set_ylabel("Average Covered/(food/bots)")
- ax.set_title(plot_title)
- #plotname = path + '/' + plot_title + "_" + _data
- #fig.savefig(plotname + '.pdf', orientation='landscape')
- #fig.savefig(plotname + '.png', orientation='landscape')
- curr_p = 0
- for p in path:
- analyseFolders(p, curr_p, drawY, drawError)
- curr_p += 1
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement