Advertisement
AmCholadawan

reorder

Apr 29th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.29 KB | None | 0 0
  1. from matplotlib import pyplot as plt
  2. import matplotlib.cm as cm
  3. import numpy as np
  4. import os
  5. from glob import glob
  6. import csv
  7. from collections import OrderedDict
  8. import ast
  9. import re
  10. import fnmatch
  11.  
  12.  
  13. plot_title = "Total Step Taken_" +str(trophFolder) + '_' +str(testNumber)
  14.  
  15. #list of string
  16. data_to_import = ['total_steps_taken']
  17. #data_to_import = ['total_area_covered']
  18.  
  19.  
  20. # ->
  21. # 0 don't draw error bars
  22. # 1 draw error bars
  23. drawError = 1
  24.  
  25. path = []
  26.  
  27. eff_array = ['0','0','40', '50','60','70', '80', '90', '100']
  28.  
  29. testNumber = 'FiniteFood'
  30. cwd = '/Users/ammacpro1/AnacondaProjects/A_Trophallaxis_Model_for_journal_ALR_2500_maxfood100_checkboardmap_20runs/Simulation_results/' + testNumber
  31.  
  32. ##cwd = os.getcwd()
  33. ##cwd = cwd + "/" + testNumber
  34.  
  35. UTfolder_reference = ['Random_No_Trophallaxis',
  36.                       'Levywalklike_No_Trophallaxis'
  37.                       ] #'Random_No_Trophallaxis' 'Levyrandom_No_Trophallaxis'
  38.  
  39. UTprefix = ['Random_Trophallaxis_Generous_eff',
  40.             'Random_Trophallaxis_UT70LT20average_eff',
  41.             'Levywalklike_Trophallaxis_Generous_eff',
  42.             'Levywalklike_Trophallaxis_UT70LT20average_eff',
  43.             #'Levyrandom_Trophallaxis_Generous_eff',
  44.             #'Levyrandom_Trophallaxis_UT70LT20average_eff',
  45.            ]
  46. UTprefixLegend = ['Random_Trophallaxis_Generous',
  47.             'Random_Trophallaxis_UT70LT20average',
  48.             'Levywalklike_Trophallaxis_Generous',
  49.             'Levywalklike_Trophallaxis_UT70LT20average',
  50.             #'Levyrandom_Trophallaxis_Generous',
  51.             #'Levyrandom_Trophallaxis_UT70LT20average',
  52.            ]
  53.  
  54.  
  55. trophFolder = 'Bots225'
  56.  
  57. #UTfolder = ['No_Trophallaxis','Trophallaxis_generous', 'Th50','Th70','Th90',]
  58. UTfolderP = []
  59. for p in UTprefix:
  60.     for n in range(len(eff_array)-1):
  61.         UTfolderP.append(p + eff_array[n+1])
  62. UTfolder = UTfolder_reference.copy()
  63. for pf in UTfolderP:
  64.     UTfolder.append(pf)
  65.  
  66. UTfolderP2 = UTfolder_reference.copy()
  67. for pf in UTprefixLegend:
  68.     UTfolderP2.append(pf)
  69.  
  70. for f in UTfolder:
  71.     path.append(cwd + '/' + f + '/' + trophFolder + '/Bot*/*Summary.csv')
  72. data_to_plot = {}
  73. def analyseFolders(folder, curr_p):
  74.     #nitialises an empty dictionary
  75.     data = {}
  76.     #data_to_plot = {}
  77.  
  78.     for _data in data_to_import:
  79.         data[_data] = []
  80.  
  81.     files = glob(folder)
  82.     for file in files:
  83.         with open(file, 'rt') as f:
  84.             reader = csv.reader(f, delimiter=',')
  85.             for row in reader:
  86.                 for key in data_to_import:
  87.                     if row[0] in [key]:
  88.                         data[key].append(row[1])
  89.  
  90.     sorted_data = dict.fromkeys(data.keys(),[])
  91.  
  92.     keys = [key for key, value in data.items()]
  93.     #print(keys)
  94.     #print('curr_p', curr_p)
  95.     for _data in [key for key, value in data.items()]:
  96.         #data_to_plot[_data + "_f" + UTfolderP2[curr_pref] + "_eff" + eff_array[curr_p]] = \
  97.         data_to_plot[_data + "_eff" + eff_array[curr_p]] = \
  98.                                                         [float(i) for i in data[_data]]
  99.     keys_plot = [key for key, value in data_to_plot.items()]
  100.     #print('keys_plot', keys_plot)
  101.  
  102. fig, ax = plt.subplots()
  103. #colors = cm.rainbow(np.linspace(0.4, 1, len(UTfolderP2)))
  104. widths = np.linspace(2, 0.5, len(UTfolderP2))
  105. #Markers = ['+','+','o','o','o','^','o','p','s']
  106. #LineStyles = ['--','--','-','-','-','-.',':','--']
  107. #colors = ['darkturquoise','flesh','dodgerblue3', 'deepskyblue1','firebrick2','tomato1'] #colors code from https://www.webucator.com/blog/2015/03/python-color-constants-module/
  108. colors = ['#00CED1','#FF7D40','#1874CD','#00BFFF','#EE2C2C','#FF4500',] # for all
  109. #colors = ['#00CED1','#1874CD','#00BFFF'] #for random group
  110. #colors = ['#FF7D40','#EE2C2C','#FF4500'] #for levy group
  111. Markers = ['+','o','+','+','o','o','s','s','^','s','s','s','o','^','o','p','s'] #for all
  112. #Markers = ['+','o','+',] #for a group
  113. LineStyles = ['-','-','-','--','-','--',':',':','-.','-.','-','-.',':','--'] #for all
  114. #LineStyles = ['-','-','--',] #for a group
  115.  
  116. def plotData():
  117.     #print(data_to_plot)
  118.  
  119.     data_mean = []
  120.     data_sd = []
  121.  
  122.     if curr_pref < len(UTfolder_reference):  # if len(data_to_plot) == 1:
  123.         eff_cycle = eff_array[curr_p]
  124.     else:
  125.         eff_cycle = eff_array[len(UTfolder_reference):]
  126.  
  127.     for effSize in eff_cycle:
  128.         c = colors[curr_pref]
  129.         #w = widths[curr_b]
  130.         w = 2
  131.         vals = []
  132.         sd = []
  133.         #tmpArray = data_to_plot["total_area_covered_eff" + effSize]
  134.         tmpArray = data_to_plot["total_steps_taken_eff" + effSize]
  135.         vals = np.mean(tmpArray)
  136.         if (drawError):
  137.             sd = np.std(tmpArray)
  138.         else:
  139.             sd = 0
  140.         if effSize == '0':
  141.             for i in range(len(eff_array)-len(UTfolder_reference)):
  142.                 data_mean.append(vals)
  143.                 data_sd.append(sd)
  144.         else:
  145.             data_mean.append(vals)
  146.             data_sd.append(sd)
  147.  
  148.     eff_bins = [int(x) for x in eff_array]
  149.     eff_bins = eff_bins[len(UTfolder_reference):]
  150.     ax.errorbar(eff_bins,
  151.                 data_mean,
  152.                 data_sd,
  153.                 #sd, fmt = 'o',
  154.                 capsize = 2,
  155.                 linestyle = LineStyles[curr_pref % len(LineStyles)],
  156.                 #linestyle = "None",
  157.                 linewidth = w,
  158.                 marker = Markers[curr_pref % len(Markers)],
  159.                 #marker='o',
  160.                 color = c,
  161.                 #label = "Number of food patches = " + str(effSize))
  162.                 label = UTfolderP2[curr_pref])
  163.  
  164.     ax.legend(frameon=False, loc="best", prop={'size': 10})
  165.     ax.set_xlabel("E transfer efficiency")
  166.     ax.set_ylabel("Average Step Taken")
  167.  
  168.     ax.set_title(plot_title)
  169.  
  170.     #plotname = path + '/' + plot_title + "_" + _data
  171.     #fig.savefig(plotname + '.pdf', orientation='landscape')
  172.     #fig.savefig(plotname + '.png', orientation='landscape')
  173.  
  174.     plt.show(block=False)
  175.  
  176.  
  177. def reorderLegend():
  178.     n_flats = len(UTfolder_reference)
  179.  
  180.     if n_flats != 1:
  181.         n_nonflats = len(UTprefix)
  182.         n_in_group = n_nonflats / n_flats
  183.  
  184.         old_order = list(range(n_nonflats))
  185.         new_order = []
  186.  
  187.         for flat in range(n_flats):
  188.             new_order.append(flat)
  189.             for nonflat in range(n_in_group):
  190.                 idx = flat * n_in_group + nonflat
  191.                 new_order.append(old_order[idx])
  192.  
  193.         handles, labels = ax.get_legend_handles_labels()
  194.         plt.legend([handles[i] for i in new_order], [labels[i] for i in new_order])
  195.  
  196.  
  197. ########## main
  198.  
  199. curr_p = 0   #curr_path = current path
  200. curr_pref = 0
  201.  
  202. for f in range(len(UTfolder_reference)):
  203.     data_to_plot = {}
  204.     analyseFolders(path[curr_p], curr_p)
  205.     plotData()
  206.     curr_p += 1
  207.     curr_pref += 1
  208.  
  209. for pp in UTprefix:
  210.     UTfolderP = []
  211.     for n in range(len(eff_array)-len(UTfolder_reference)):
  212.         UTfolderP.append(pp + eff_array[n+len(UTfolder_reference)])
  213.     path = []
  214.     for f in UTfolderP:
  215.         path.append(cwd + '/' + f + '/' + trophFolder + '/Bot*/*Summary.csv')
  216.     # print(path)
  217.     curr_p = len(UTfolder_reference)
  218.     for p in path: #p is the full path depending on which f is currently being used, f is a part of full path
  219.         analyseFolders(p, curr_p)
  220.         curr_p += 1
  221.     plotData()
  222.     curr_pref += 1
  223.  
  224. reorderLegend()
  225. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement