Skip to content

Commit 50f7206

Browse files
committed
notebooks: update results plots
1 parent 041ddca commit 50f7206

File tree

2 files changed

+90
-73
lines changed

2 files changed

+90
-73
lines changed

notebooks/results/Final result plots.ipynb

Lines changed: 75 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,9 @@
202202
" ax.fill_between(t, mu+sigma, mu-sigma, color='b', alpha=0.2)\n",
203203
" ax.set_ylim(0, 1.01)\n",
204204
" ax.plot([0, 1], [1, 0], 'r', label='Best possible path')\n",
205-
" ax.set_xlabel('Distance travelled relative to turning point distance',\n",
205+
" ax.set_xlabel('distance travelled relative to turning point distance',\n",
206206
" fontsize=label_font_size)\n",
207-
" ax.set_ylabel('Distance from home', fontsize=label_font_size)\n",
207+
" ax.set_ylabel('distance from home', fontsize=label_font_size)\n",
208208
" ax.set_title('(f)')#Tortuosity of homebound route', y=1.05, fontsize=label_font_size)\n",
209209
"\n",
210210
" vals = ax.get_xticks()\n",
@@ -263,8 +263,8 @@
263263
" ax.plot(timesteps, mean_errors, color=color, label=noise)\n",
264264
" ax.fill_between(timesteps,mean_errors-std_errors, mean_errors, color=color, alpha=0.2)\n",
265265
" \n",
266-
" ax.set_xlabel(\"Time (steps)\")\n",
267-
" ax.set_ylabel(\"Memory error\")\n",
266+
" ax.set_xlabel(\"timesteps\")\n",
267+
" ax.set_ylabel(\"memory error (steps)\")\n",
268268
" ax.set_title(\"(d)\")\n",
269269
" \n",
270270
" ax.legend(title=\"Noise\", loc='upper left')\n",
@@ -285,8 +285,8 @@
285285
" ax.plot(timesteps, mean_errors, color=color, label=noise)\n",
286286
" ax.fill_between(timesteps,mean_errors-std_errors, mean_errors, color=color, alpha=0.2)\n",
287287
" \n",
288-
" ax.set_xlabel(\"Timesteps\")\n",
289-
" ax.set_ylabel(\"Angular memory error\")\n",
288+
" ax.set_xlabel(\"timesteps\")\n",
289+
" ax.set_ylabel(\"angular memory error\")\n",
290290
" ax.set_yticks([-180,-90,0,90,180])\n",
291291
" \n",
292292
" ax.legend(title=\"Noise\", loc='upper left')\n",
@@ -309,8 +309,8 @@
309309
" ax.plot(timesteps, mean_errors, color=color, label=noise)\n",
310310
" ax.fill_between(timesteps,mean_errors-std_errors, mean_errors, color=color, alpha=0.2)\n",
311311
" \n",
312-
" ax.set_xlabel(\"Inbound time (steps)\")\n",
313-
" ax.set_ylabel(\"Heading error\")\n",
312+
" ax.set_xlabel(\"inbound timesteps\")\n",
313+
" ax.set_ylabel(\"heading error (steps)\")\n",
314314
" ax.set_title(\"(e)\")\n",
315315
" \n",
316316
" ax.legend(title=\"Noise\", loc='upper right')\n",
@@ -347,7 +347,7 @@
347347
" ax.plot(T, mean_optimal, label=\"mean optimal distance\", color=\"orange\")\n",
348348
"# ax.fill_between(T,mean_optimal, min_optimal, color=\"orange\", alpha=0.2)\n",
349349
"# ax.fill_between(T,mean_optimal, max_optimal, color=\"orange\", alpha=0.2)\n",
350-
" ax.set_xlabel(\"Timesteps homing\")\n",
350+
" ax.set_xlabel(\"timesteps homing\")\n",
351351
" ax.set_ylabel(\"% of homing distance remaining\")\n",
352352
" ax.set_xlim(0, T_outbound)\n",
353353
" ax.legend()\n",
@@ -368,8 +368,8 @@
368368
" \n",
369369
" if ax is not None:\n",
370370
" ax.yaxis.set_major_locator(MaxNLocator(integer=True))\n",
371-
" ax.set_xlabel(\"Closest distance\")\n",
372-
" ax.set_ylabel(\"Frequency\")\n",
371+
" ax.set_xlabel(\"closest distance (steps)\")\n",
372+
" ax.set_ylabel(\"frequency\")\n",
373373
" ax.set_title(\"(b)\")\n",
374374
" ax.hist(min_dists, bins=np.arange(min(min_dists), max(min_dists) + binwidth, binwidth))\n",
375375
" ax.axvline(interval[1],color=\"k\",linestyle=\"--\")\n",
@@ -393,7 +393,7 @@
393393
" legend_title=\"Parameter noise\"\n",
394394
" title = \"\"\n",
395395
" \n",
396-
" utbounds = get_outbounds(model)\n",
396+
" outbounds = get_outbounds(model)\n",
397397
" grouped = group_by_outbound(model)\n",
398398
" \n",
399399
" distances = np.array([get_min_dists(group,noise,get_outbounds(group)[0]) for group in grouped])\n",
@@ -403,8 +403,8 @@
403403
" std_dists = distances.std(axis=1)\n",
404404
" \n",
405405
" if ax is not None:\n",
406-
" ax.set_xlabel(\"Outbound time (steps)\")\n",
407-
" ax.set_ylabel(\"Closest distance\")\n",
406+
" ax.set_xlabel(\"outbound timesteps\")\n",
407+
" ax.set_ylabel(\"closest distance (steps)\")\n",
408408
" ax.set_title(title)\n",
409409
"\n",
410410
" ax.plot(outbounds, mean_dists, color=color, label=noise)\n",
@@ -425,8 +425,8 @@
425425
" std_dists = distances.std(axis=1)\n",
426426
" \n",
427427
" if ax is not None:\n",
428-
" ax.set_xlabel(\"Outbound time (steps)\")\n",
429-
" ax.set_ylabel(\"Closest distance\")\n",
428+
" ax.set_xlabel(\"outbound timesteps\")\n",
429+
" ax.set_ylabel(\"closest distance (steps)\")\n",
430430
"# ax.set_title(title)\n",
431431
"\n",
432432
" ax.plot(outbounds, mean_dists, color=color, label=model[0]['name'].split(\".\")[0])\n",
@@ -457,7 +457,7 @@
457457
" return [list(v) for l,v in groupby(sorted(data, key=lambda x:x[\"T_outbound\"]), lambda x: x[\"T_outbound\"])]\n",
458458
"\n",
459459
"def group_by_name(data):\n",
460-
" lookup = {'dye basic':0, 'dye var beta':1, 'dye pontine':2, 'dye var beta + pontine':3, 'weights':4, 'stone':5}\n",
460+
" lookup = {'dye basic':0, 'dye var beta':1, 'dye amp':2, 'dye var beta + amp':3, 'weights':4, 'stone':5}\n",
461461
" a = lambda x : lookup[x[\"name\"].split('.')[0]]\n",
462462
" return [list(v) for l,v in groupby(sorted(data.values(), key=a), a)]\n",
463463
"\n",
@@ -479,36 +479,45 @@
479479
"outputs": [],
480480
"source": [
481481
"paths = []\n",
482-
"# paths.append(\"../../results/dye-eval_20221009-145512\")\n",
483-
"# paths.append(\"../../results/beta-dye-eval_20221009-145808\")\n",
484-
"# paths.append(\"../../results/cheat-dye-eval_20221009-145601\")\n",
485-
"# paths.append(\"../../results/beta-cheat-dye_20221009-150619\")\n",
486-
"# paths.append(\"../../results/model-v-model_20221010-173329\")\n",
482+
"# paths.append(\"../../results/dye-eval_20221013-221455\")\n",
483+
"# paths.append(\"../../results/beta-dye-eval_20221014-164746\")\n",
484+
"# paths.append(\"../../results/cheat-dye-eval_20221013-221723\")\n",
485+
"# paths.append(\"../../results/beta-cheat-dye_20221014-164657\")\n",
486+
"# paths.append(\"../../results/model-v-model_20221017-104736\")\n",
487+
"paths.append(\"../../results/model-v-model_20221017-113819\")\n",
487488
"# paths.append(\"../../results/stone-eval_20221010-153927\")\n",
488489
"# paths.append(\"../../results/weights-eval_20221011-202459\")\n",
489490
"\n",
490491
"# paths.append(\"../../results/model-v-model-outbound_20221013-110812\")\n",
491492
"# paths.append(\"../../results/model-v-model-outbound_20221013-114021\")\n",
492-
"paths.append(\"../../results/model-v-model_20221013-114739\")\n",
493+
"# paths.append(\"../../results/model-v-model_20221013-114739\")\n",
493494
"\n",
494495
"results = load_results(enumerate_results(paths))"
495496
]
496497
},
497498
{
498499
"cell_type": "code",
499500
"execution_count": null,
500-
"id": "652ff8e8",
501-
"metadata": {
502-
"scrolled": true
503-
},
501+
"id": "c60160d0",
502+
"metadata": {},
504503
"outputs": [],
505504
"source": [
506505
"noise = 0.1\n",
507506
"T_outbound = 1500\n",
508507
"\n",
509508
"data = {}\n",
510-
"examples = []\n",
511-
"\n",
509+
"examples = []"
510+
]
511+
},
512+
{
513+
"cell_type": "code",
514+
"execution_count": null,
515+
"id": "652ff8e8",
516+
"metadata": {
517+
"scrolled": true
518+
},
519+
"outputs": [],
520+
"source": [
512521
"for result in tqdm(results):\n",
513522
" if result.parameters['cx']['params']['noise'] == noise and result.parameters['T_outbound'] == T_outbound and len(examples) < 10 and result.parameters['cx']['params'].get('parameter_noise',None) == None:\n",
514523
" examples.append(result)\n",
@@ -521,9 +530,7 @@
521530
"cell_type": "code",
522531
"execution_count": null,
523532
"id": "92b9fc80",
524-
"metadata": {
525-
"scrolled": false
526-
},
533+
"metadata": {},
527534
"outputs": [],
528535
"source": [
529536
"def single_model_eval(data, noise_levels=[0.1,0.2,0.3,0.4]):\n",
@@ -586,7 +593,8 @@
586593
" min_dist_v_route_length(model_2,noise,ax=ax,color=color,param=True)\n",
587594
" ax.set_title(\"Minimum distance plot with noise on dye parameters\")\n",
588595
"\n",
589-
"single_model_eval(data)\n"
596+
"# single_model_eval(data)\n",
597+
"print(data)"
590598
]
591599
},
592600
{
@@ -607,33 +615,33 @@
607615
" showmedians=False\n",
608616
" \n",
609617
" ax = plt.subplot(221)\n",
610-
" data = [get_min_dists(model) for model in models]\n",
618+
" min_dists = [get_min_dists(model) for model in models]\n",
611619
"# ax.boxplot(data,notch=True,labels=labels)\n",
612-
" ax.violinplot(data,showmeans=showmeans,showmedians=showmedians)\n",
620+
" ax.violinplot(min_dists,showmeans=showmeans,showmedians=showmedians)\n",
613621
" ax.set_xticks([1,2,3,4,5,6])\n",
614622
" ax.set_xticklabels(labels)\n",
615623
" ax.set_title(\"(a)\")\n",
616-
" ax.set_ylabel(\"Closest distance\")\n",
624+
" ax.set_ylabel(\"closest distance (steps)\")\n",
617625
" plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right')\n",
618626
" \n",
619627
" ax = plt.subplot(222)\n",
620-
" data = [mem_errors(model).mean(axis=1) for model in models]\n",
628+
" mem_err = [mem_errors(model).mean(axis=1) for model in models]\n",
621629
"# ax.boxplot(data,notch=True,labels=labels)\n",
622-
" ax.violinplot(data,showmeans=showmeans,showmedians=showmedians)\n",
630+
" ax.violinplot(mem_err,showmeans=showmeans,showmedians=showmedians)\n",
623631
" ax.set_xticks([1,2,3,4,5,6])\n",
624632
" ax.set_xticklabels(labels)\n",
625633
" ax.set_title(\"(b)\")\n",
626-
" ax.set_ylabel(\"Memory error\")\n",
634+
" ax.set_ylabel(\"memory error (steps)\")\n",
627635
" plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right')\n",
628636
" \n",
629637
" ax = plt.subplot(223)\n",
630-
" data = [heading_errors(model)[1].mean(axis=1) for model in models]\n",
638+
" heading_err = [heading_errors(model)[1].mean(axis=1) for model in models]\n",
631639
"# ax.boxplot(data,notch=True,labels=labels)\n",
632-
" ax.violinplot(data,showmeans=showmeans,showmedians=showmedians)\n",
640+
" ax.violinplot(heading_err,showmeans=showmeans,showmedians=showmedians)\n",
633641
" ax.set_xticks([1,2,3,4,5,6])\n",
634642
" ax.set_xticklabels(labels)\n",
635643
" ax.set_title(\"(c)\")\n",
636-
" ax.set_ylabel(\"Heading error during homing\")\n",
644+
" ax.set_ylabel(\"heading error during homing (steps)\")\n",
637645
" plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right')\n",
638646
" \n",
639647
"# ax = plt.subplot(224)\n",
@@ -667,32 +675,49 @@
667675
"# plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right')\n",
668676
" \n",
669677
" \n",
670-
" data = []\n",
678+
" torts = []\n",
671679
" for model in models:\n",
672680
" V = []\n",
673681
" for result in model:\n",
674682
" V.append(result['velocities'])\n",
675683
" V = np.array(V)\n",
676684
" cum_min_dist = compute_path_straightness(V,1500)\n",
677685
" tort = compute_tortuosity(cum_min_dist)\n",
678-
" data.append(tort)\n",
686+
" torts.append(tort)\n",
679687
" \n",
680688
" ax = plt.subplot(224)\n",
681-
" bars = ax.bar([1,2,3,4,5,6],data,alpha=0.5)\n",
689+
" bars = ax.bar([1,2,3,4,5,6],torts,alpha=0.5)\n",
682690
" ax.set_xticks([1,2,3,4,5,6])\n",
683691
" ax.set_xticklabels(labels)\n",
684692
" ax.set_title(\"(d)\")\n",
685-
" ax.set_ylabel(\"Tortuosity of mean path\")\n",
693+
" ax.set_ylabel(\"tortuosity of mean path\")\n",
686694
" plt.setp(ax.get_xticklabels(), rotation=30, horizontalalignment='right')\n",
687695
" \n",
688696
" ax.bar_label(bars)\n",
689-
" \n",
690697
" # print(model[0]['name'],' tortuosity is ',tort)\n",
691698
" \n",
692-
" fig.tight_layout() \n",
699+
" fig.tight_layout()\n",
700+
" \n",
701+
" return min_dists, mem_err, heading_err, torts\n",
702+
"\n",
693703
"\n",
694704
"models = group_by_name(data)\n",
695-
"model_to_model(models)"
705+
"min_dists, mem_err, heading_err, torts = model_to_model(models)\n",
706+
"\n",
707+
"from scipy import stats as st\n",
708+
"test1 = st.ttest_ind(a=mem_err[0], b=mem_err[3], equal_var=True)\n",
709+
"test2 = st.ttest_ind(a=min_dists[0], b=min_dists[2], equal_var=True)\n",
710+
"test3 = st.ttest_ind(a=min_dists[2], b=min_dists[5], equal_var=True)\n",
711+
"\n",
712+
"print(\"Memory error t-test between dye basic and stone:\\n \", test1, \"\\n\")\n",
713+
"print(\"Closest distance t-test between dye basic and dye amp:\\n \", test2, \"\\n\")\n",
714+
"print(\"Closest distance t-test between dye amp and stone:\\n \", test3, \"\\n\")\n",
715+
"\n",
716+
"ttests = {\"min_dists\": [list(a) for a in min_dists], \"mem_err\": [list(a) for a in mem_err], \"heading_err\": [list(a) for a in heading_err], \"heading_err\": torts}\n",
717+
"\n",
718+
"import json\n",
719+
"with open('ttest.json', 'w', encoding='utf-8') as f:\n",
720+
" json.dump(ttests, f)"
696721
]
697722
},
698723
{
@@ -709,14 +734,6 @@
709734
"for model, color in zip(models,colors):\n",
710735
" min_dist_v_route_length_2(model,color=color,ax=plt.gca())"
711736
]
712-
},
713-
{
714-
"cell_type": "code",
715-
"execution_count": null,
716-
"id": "e5250bac",
717-
"metadata": {},
718-
"outputs": [],
719-
"source": []
720737
}
721738
],
722739
"metadata": {
@@ -735,7 +752,7 @@
735752
"name": "python",
736753
"nbconvert_exporter": "python",
737754
"pygments_lexer": "ipython3",
738-
"version": "3.10.4"
755+
"version": "3.8.10"
739756
}
740757
},
741758
"nbformat": 4,

notebooks/results/Obstacle avoidance and holonomic movement.ipynb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,21 @@
6262
" }\n",
6363
"}\n",
6464
"\n",
65-
"# parameters = {\n",
66-
"# \"type\": \"simulation\",\n",
67-
"# \"T_outbound\":T_outbound,\n",
68-
"# \"T_inbound\": T_inbound,\n",
69-
"# \"min_homing_distance\": 300,\n",
70-
"# \"motor_factor\": 1,\n",
71-
"# \"seed\": 1,\n",
72-
"# \"obstacles\": obstacles,\n",
73-
"# \"cx\": {\n",
74-
"# \"type\": \"pontine\",\n",
75-
"# \"params\": {\n",
76-
"# \"noise\": 0.1,\n",
77-
"# }\n",
78-
"# }\n",
79-
"# }\n",
65+
"parameters = {\n",
66+
" \"type\": \"simulation\",\n",
67+
" \"T_outbound\":T_outbound,\n",
68+
" \"T_inbound\": T_inbound,\n",
69+
" \"min_homing_distance\": 300,\n",
70+
" \"motor_factor\": 1,\n",
71+
" \"seed\": 1,\n",
72+
" \"obstacles\": obstacles,\n",
73+
" \"cx\": {\n",
74+
" \"type\": \"pontine\",\n",
75+
" \"params\": {\n",
76+
" \"noise\": 0.1,\n",
77+
" }\n",
78+
" }\n",
79+
"}\n",
8080
"\n",
8181
"experiment = SimulationExperiment(parameters)\n",
8282
"results = experiment.run(\"test\",\"1\")"

0 commit comments

Comments
 (0)