notebooks/plot_mean_score.ipynb (277 lines of code) (raw):
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import cm, colors, rcParams\n",
"\n",
"import bayesmark.constants as cc\n",
"import bayesmark.xr_util as xru\n",
"from bayesmark.serialize import XRSerializer\n",
"from bayesmark.constants import ITER, METHOD, ARG_DELIM, OBJECTIVE, VISIBLE_TO_OPT\n",
"from bayesmark.path_util import abspath\n",
"from bayesmark.util import preimage_func"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# User settings, must specify location of the data to make plots here for this to run\n",
"DB_ROOT = abspath(\".\")\n",
"DBID = \"bo_example_folder\"\n",
"metric_for_scoring = VISIBLE_TO_OPT"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Matplotlib setup\n",
"# Note this will put type-3 font BS in the pdfs, if it matters\n",
"rcParams[\"mathtext.fontset\"] = \"stix\"\n",
"rcParams[\"font.family\"] = \"STIXGeneral\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def build_color_dict(names):\n",
" \"\"\"Make a color dictionary to give each name a mpl color.\n",
" \"\"\"\n",
" norm = colors.Normalize(vmin=0, vmax=1)\n",
" m = cm.ScalarMappable(norm, cm.tab20)\n",
" color_dict = m.to_rgba(np.linspace(0, 1, len(names)))\n",
" color_dict = dict(zip(names, color_dict))\n",
" return color_dict"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Load the data\n",
"summary_ds, meta = XRSerializer.load_derived(DB_ROOT, db=DBID, key=cc.MEAN_SCORE)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"method_to_rgba = build_color_dict(summary_ds.coords[METHOD].values.tolist())"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Group methods by the package behind them\n",
"method_only = lambda method_rev: method_rev.split(ARG_DELIM, 1)[0]\n",
"groups = preimage_func(method_only, summary_ds.coords[METHOD].values)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Make a plot for each package\n",
"for method_name in groups:\n",
" plt.figure(figsize=(5, 5), dpi=300)\n",
" for method_ver_name in groups[method_name]:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_MED].values,\n",
" curr_ds[cc.UB_MED].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.PERF_MED].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_name,\n",
" marker=\".\",\n",
" )\n",
" plt.xlabel(\"evaluation\", fontsize=10)\n",
" plt.ylabel(\"normalized median score\", fontsize=10)\n",
" plt.title(method_name)\n",
" plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
" plt.grid()\n",
"\n",
" plt.figure(figsize=(5, 5), dpi=300)\n",
" for method_ver_name in groups[method_name]:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_MEAN].values,\n",
" curr_ds[cc.UB_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.PERF_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_name,\n",
" marker=\".\",\n",
" )\n",
" plt.xlabel(\"evaluation\", fontsize=10)\n",
" plt.ylabel(\"mean score\", fontsize=10)\n",
" plt.title(method_name)\n",
" plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
" plt.grid()\n",
"\n",
" plt.figure(figsize=(5, 5), dpi=300)\n",
" for method_ver_name in groups[method_name]:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_NORMED_MEAN].values,\n",
" curr_ds[cc.UB_NORMED_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.NORMED_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_name,\n",
" marker=\".\",\n",
" )\n",
" plt.xlabel(\"evaluation\", fontsize=10)\n",
" plt.ylabel(\"normalized mean score\", fontsize=10)\n",
" plt.title(method_name)\n",
" plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
" plt.grid()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Make the summary plot\n",
"plt.figure(figsize=(5, 5), dpi=300)\n",
"for method_ver_name in summary_ds.coords[METHOD].values:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_MED].values,\n",
" curr_ds[cc.UB_MED].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.PERF_MED].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_ver_name,\n",
" marker=\".\",\n",
" )\n",
"plt.xlabel(\"evaluation\", fontsize=10)\n",
"plt.ylabel(\"normalized median score\", fontsize=10)\n",
"plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
"plt.grid()\n",
"\n",
"plt.figure(figsize=(5, 5), dpi=300)\n",
"for method_ver_name in summary_ds.coords[METHOD].values:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_MEAN].values,\n",
" curr_ds[cc.UB_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.PERF_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_ver_name,\n",
" marker=\".\",\n",
" )\n",
"plt.xlabel(\"evaluation\", fontsize=10)\n",
"plt.ylabel(\"mean score\", fontsize=10)\n",
"plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
"plt.grid()\n",
"\n",
"plt.figure(figsize=(5, 5), dpi=300)\n",
"for method_ver_name in summary_ds.coords[METHOD].values:\n",
" curr_ds = summary_ds.sel({METHOD: method_ver_name, OBJECTIVE: metric_for_scoring})\n",
" curr_ds.coords[ITER].values\n",
"\n",
" plt.fill_between(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.LB_NORMED_MEAN].values,\n",
" curr_ds[cc.UB_NORMED_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" alpha=0.5,\n",
" )\n",
" plt.plot(\n",
" curr_ds.coords[ITER].values,\n",
" curr_ds[cc.NORMED_MEAN].values,\n",
" color=method_to_rgba[method_ver_name],\n",
" label=method_ver_name,\n",
" marker=\".\",\n",
" )\n",
"plt.xlabel(\"evaluation\", fontsize=10)\n",
"plt.ylabel(\"normalized mean score\", fontsize=10)\n",
"plt.legend(fontsize=8, bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
"plt.grid()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "bobm_ipynb",
"language": "python",
"name": "bobm_ipynb"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}