diff --git a/project/03_1_best_models_comparison.ipynb b/project/03_1_best_models_comparison.ipynb index 6a6f6f6fe..af3948834 100644 --- a/project/03_1_best_models_comparison.ipynb +++ b/project/03_1_best_models_comparison.ipynb @@ -6,18 +6,18 @@ "metadata": {}, "outputs": [], "source": [ + "import logging\n", "from pathlib import Path\n", - "import pandas as pd\n", "\n", "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", "import seaborn as sns\n", "\n", - "import vaep.pandas\n", "import vaep.nb\n", - "\n", - "import logging\n", + "import vaep.pandas\n", "import vaep.plotting\n", "from vaep.logging import setup_logger\n", + "\n", "logger = setup_logger(logger=logging.getLogger('vaep'), level=10)\n", "\n", "plt.rcParams['figure.figsize'] = [4.0, 2.0]\n", @@ -164,16 +164,34 @@ "metadata": {}, "outputs": [], "source": [ - "ax = sns.barplot(x='data level',\n", - " y='MAE',\n", - " hue='model',\n", - " order=IDX[0],\n", - " palette=vaep.plotting.defaults.color_model_mapping,\n", - " ci=95,\n", - " errwidth=1.5,\n", - " data=view_long)\n", - "ax.set_xlabel('')\n", - "fig = ax.get_figure()" + "# individual points overlaid on bar plot:\n", + "# seaborn 12.2\n", + "# https://stackoverflow.com/a/69398767/9684872\n", + "sns.set_theme(context='paper', ) # font_scale=.8)\n", + "sns.set_style(\"whitegrid\")\n", + "g = sns.catplot(x=\"data level\", y=\"MAE\", hue='model', data=view_long,\n", + " kind=\"bar\",\n", + " errorbar=\"ci\", # ! 95% confidence interval bootstrapped (using 1000 draws by default)\n", + " edgecolor=\"black\",\n", + " errcolor=\"black\",\n", + " hue_order=IDX[1],\n", + " order=IDX[0],\n", + " palette=vaep.plotting.defaults.color_model_mapping,\n", + " alpha=0.9,\n", + " height=2, # set the height of the figure\n", + " aspect=1.8 # set the aspect ratio of the figure\n", + " )\n", + "\n", + "# map data to stripplot\n", + "g.map(sns.stripplot, 'data level', 'MAE', 'model',\n", + " hue_order=IDX[1], order=IDX[0],\n", + " palette=vaep.plotting.defaults.color_model_mapping,\n", + " dodge=True, alpha=1, ec='k', linewidth=1,\n", + " s=2)\n", + "\n", + "fig = g.figure\n", + "ax = fig.get_axes()[0]\n", + "_ = ax.set_xlabel('')" ] }, { @@ -182,7 +200,7 @@ "metadata": {}, "outputs": [], "source": [ - "vaep.savefig(fig, FOLDER / \"model_performance_repeated_runs.pdf\")" + "vaep.savefig(fig, FOLDER / \"model_performance_repeated_runs.pdf\", tight_layout=False)" ] }, { diff --git a/project/03_1_best_models_comparison.py b/project/03_1_best_models_comparison.py index 97c54d8b5..6a2daadce 100644 --- a/project/03_1_best_models_comparison.py +++ b/project/03_1_best_models_comparison.py @@ -14,18 +14,18 @@ # --- # %% +import logging from pathlib import Path -import pandas as pd import matplotlib.pyplot as plt +import pandas as pd import seaborn as sns -import vaep.pandas import vaep.nb - -import logging +import vaep.pandas import vaep.plotting from vaep.logging import setup_logger + logger = setup_logger(logger=logging.getLogger('vaep'), level=10) plt.rcParams['figure.figsize'] = [4.0, 2.0] @@ -102,19 +102,37 @@ view_long # %% -ax = sns.barplot(x='data level', - y='MAE', - hue='model', - order=IDX[0], - palette=vaep.plotting.defaults.color_model_mapping, - ci=95, - errwidth=1.5, - data=view_long) -ax.set_xlabel('') -fig = ax.get_figure() +# individual points overlaid on bar plot: +# seaborn 12.2 +# https://stackoverflow.com/a/69398767/9684872 +sns.set_theme(context='paper', ) # font_scale=.8) +sns.set_style("whitegrid") +g = sns.catplot(x="data level", y="MAE", hue='model', data=view_long, + kind="bar", + errorbar="ci", # ! 95% confidence interval bootstrapped (using 1000 draws by default) + edgecolor="black", + errcolor="black", + hue_order=IDX[1], + order=IDX[0], + palette=vaep.plotting.defaults.color_model_mapping, + alpha=0.9, + height=2, # set the height of the figure + aspect=1.8 # set the aspect ratio of the figure + ) + +# map data to stripplot +g.map(sns.stripplot, 'data level', 'MAE', 'model', + hue_order=IDX[1], order=IDX[0], + palette=vaep.plotting.defaults.color_model_mapping, + dodge=True, alpha=1, ec='k', linewidth=1, + s=2) + +fig = g.figure +ax = fig.get_axes()[0] +_ = ax.set_xlabel('') # %% -vaep.savefig(fig, FOLDER / "model_performance_repeated_runs.pdf") +vaep.savefig(fig, FOLDER / "model_performance_repeated_runs.pdf", tight_layout=False) # %% writer.close() diff --git a/vaep/plotting/__init__.py b/vaep/plotting/__init__.py index 38e39c8d4..5053a7d66 100644 --- a/vaep/plotting/__init__.py +++ b/vaep/plotting/__init__.py @@ -45,14 +45,16 @@ def _savefig(fig, name, folder: pathlib.Path = '.', pdf=True, - dpi=300 # default 'figure' + dpi=300, # default 'figure', + tight_layout=True, ): """Save matplotlib Figure (having method `savefig`) as pdf and png.""" folder = pathlib.Path(folder) fname = folder / name folder = fname.parent # in case name specifies folders folder.mkdir(exist_ok=True, parents=True) - fig.tight_layout() + if tight_layout: + fig.tight_layout() fig.savefig(fname.with_suffix('.png'), dpi=dpi) if pdf: fig.savefig(fname.with_suffix('.pdf'), dpi=dpi)