Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from matplotlib import pyplot as plt
- import matplotlib.cm as cm
- import numpy as np
- import os
- from glob import glob
- import csv
- from collections import OrderedDict
- import ast
- import re
- import fnmatch
- plot_title = "Total Step Taken_" +str(trophFolder) + '_' +str(testNumber)
- #list of string
- data_to_import = ['total_steps_taken']
- #data_to_import = ['total_area_covered']
- # ->
- # 0 don't draw error bars
- # 1 draw error bars
- drawError = 1
- path = []
- eff_array = ['0','0','40', '50','60','70', '80', '90', '100']
- testNumber = 'FiniteFood'
- cwd = '/Users/ammacpro1/AnacondaProjects/A_Trophallaxis_Model_for_journal_ALR_2500_maxfood100_checkboardmap_20runs/Simulation_results/' + testNumber
- ##cwd = os.getcwd()
- ##cwd = cwd + "/" + testNumber
- UTfolder_reference = ['Random_No_Trophallaxis',
- 'Levywalklike_No_Trophallaxis'
- ] #'Random_No_Trophallaxis' 'Levyrandom_No_Trophallaxis'
- UTprefix = ['Random_Trophallaxis_Generous_eff',
- 'Random_Trophallaxis_UT70LT20average_eff',
- 'Levywalklike_Trophallaxis_Generous_eff',
- 'Levywalklike_Trophallaxis_UT70LT20average_eff',
- #'Levyrandom_Trophallaxis_Generous_eff',
- #'Levyrandom_Trophallaxis_UT70LT20average_eff',
- ]
- UTprefixLegend = ['Random_Trophallaxis_Generous',
- 'Random_Trophallaxis_UT70LT20average',
- 'Levywalklike_Trophallaxis_Generous',
- 'Levywalklike_Trophallaxis_UT70LT20average',
- #'Levyrandom_Trophallaxis_Generous',
- #'Levyrandom_Trophallaxis_UT70LT20average',
- ]
- trophFolder = 'Bots225'
- #UTfolder = ['No_Trophallaxis','Trophallaxis_generous', 'Th50','Th70','Th90',]
- UTfolderP = []
- for p in UTprefix:
- for n in range(len(eff_array)-1):
- UTfolderP.append(p + eff_array[n+1])
- UTfolder = UTfolder_reference.copy()
- for pf in UTfolderP:
- UTfolder.append(pf)
- UTfolderP2 = UTfolder_reference.copy()
- for pf in UTprefixLegend:
- UTfolderP2.append(pf)
- for f in UTfolder:
- path.append(cwd + '/' + f + '/' + trophFolder + '/Bot*/*Summary.csv')
- data_to_plot = {}
- def analyseFolders(folder, curr_p):
- #nitialises an empty dictionary
- data = {}
- #data_to_plot = {}
- for _data in data_to_import:
- data[_data] = []
- files = glob(folder)
- for file in files:
- with open(file, 'rt') as f:
- reader = csv.reader(f, delimiter=',')
- for row in reader:
- for key in data_to_import:
- if row[0] in [key]:
- data[key].append(row[1])
- sorted_data = dict.fromkeys(data.keys(),[])
- keys = [key for key, value in data.items()]
- #print(keys)
- #print('curr_p', curr_p)
- for _data in [key for key, value in data.items()]:
- #data_to_plot[_data + "_f" + UTfolderP2[curr_pref] + "_eff" + eff_array[curr_p]] = \
- data_to_plot[_data + "_eff" + eff_array[curr_p]] = \
- [float(i) for i in data[_data]]
- keys_plot = [key for key, value in data_to_plot.items()]
- #print('keys_plot', keys_plot)
- fig, ax = plt.subplots()
- #colors = cm.rainbow(np.linspace(0.4, 1, len(UTfolderP2)))
- widths = np.linspace(2, 0.5, len(UTfolderP2))
- #Markers = ['+','+','o','o','o','^','o','p','s']
- #LineStyles = ['--','--','-','-','-','-.',':','--']
- #colors = ['darkturquoise','flesh','dodgerblue3', 'deepskyblue1','firebrick2','tomato1'] #colors code from https://www.webucator.com/blog/2015/03/python-color-constants-module/
- colors = ['#00CED1','#FF7D40','#1874CD','#00BFFF','#EE2C2C','#FF4500',] # for all
- #colors = ['#00CED1','#1874CD','#00BFFF'] #for random group
- #colors = ['#FF7D40','#EE2C2C','#FF4500'] #for levy group
- Markers = ['+','o','+','+','o','o','s','s','^','s','s','s','o','^','o','p','s'] #for all
- #Markers = ['+','o','+',] #for a group
- LineStyles = ['-','-','-','--','-','--',':',':','-.','-.','-','-.',':','--'] #for all
- #LineStyles = ['-','-','--',] #for a group
- def plotData():
- #print(data_to_plot)
- data_mean = []
- data_sd = []
- if curr_pref < len(UTfolder_reference): # if len(data_to_plot) == 1:
- eff_cycle = eff_array[curr_p]
- else:
- eff_cycle = eff_array[len(UTfolder_reference):]
- for effSize in eff_cycle:
- c = colors[curr_pref]
- #w = widths[curr_b]
- w = 2
- vals = []
- sd = []
- #tmpArray = data_to_plot["total_area_covered_eff" + effSize]
- tmpArray = data_to_plot["total_steps_taken_eff" + effSize]
- vals = np.mean(tmpArray)
- if (drawError):
- sd = np.std(tmpArray)
- else:
- sd = 0
- if effSize == '0':
- for i in range(len(eff_array)-len(UTfolder_reference)):
- data_mean.append(vals)
- data_sd.append(sd)
- else:
- data_mean.append(vals)
- data_sd.append(sd)
- eff_bins = [int(x) for x in eff_array]
- eff_bins = eff_bins[len(UTfolder_reference):]
- ax.errorbar(eff_bins,
- data_mean,
- data_sd,
- #sd, fmt = 'o',
- capsize = 2,
- linestyle = LineStyles[curr_pref % len(LineStyles)],
- #linestyle = "None",
- linewidth = w,
- marker = Markers[curr_pref % len(Markers)],
- #marker='o',
- color = c,
- #label = "Number of food patches = " + str(effSize))
- label = UTfolderP2[curr_pref])
- ax.legend(frameon=False, loc="best", prop={'size': 10})
- ax.set_xlabel("E transfer efficiency")
- ax.set_ylabel("Average Step Taken")
- ax.set_title(plot_title)
- #plotname = path + '/' + plot_title + "_" + _data
- #fig.savefig(plotname + '.pdf', orientation='landscape')
- #fig.savefig(plotname + '.png', orientation='landscape')
- plt.show(block=False)
- def reorderLegend():
- n_flats = len(UTfolder_reference)
- if n_flats != 1:
- n_nonflats = len(UTprefix)
- n_in_group = n_nonflats / n_flats
- old_order = list(range(n_nonflats))
- new_order = []
- for flat in range(n_flats):
- new_order.append(flat)
- for nonflat in range(n_in_group):
- idx = flat * n_in_group + nonflat
- new_order.append(old_order[idx])
- handles, labels = ax.get_legend_handles_labels()
- plt.legend([handles[i] for i in new_order], [labels[i] for i in new_order])
- ########## main
- curr_p = 0 #curr_path = current path
- curr_pref = 0
- for f in range(len(UTfolder_reference)):
- data_to_plot = {}
- analyseFolders(path[curr_p], curr_p)
- plotData()
- curr_p += 1
- curr_pref += 1
- for pp in UTprefix:
- UTfolderP = []
- for n in range(len(eff_array)-len(UTfolder_reference)):
- UTfolderP.append(pp + eff_array[n+len(UTfolder_reference)])
- path = []
- for f in UTfolderP:
- path.append(cwd + '/' + f + '/' + trophFolder + '/Bot*/*Summary.csv')
- # print(path)
- curr_p = len(UTfolder_reference)
- for p in path: #p is the full path depending on which f is currently being used, f is a part of full path
- analyseFolders(p, curr_p)
- curr_p += 1
- plotData()
- curr_pref += 1
- reorderLegend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement