156 lines
69 KiB
Plaintext
156 lines
69 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 504x180 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"import matplotlib.patches as mpatches\n",
|
||
|
"from matplotlib.colors import colorConverter as cc\n",
|
||
|
"import numpy as np\n",
|
||
|
" \n",
|
||
|
"def plot_mean_and_CI(mean, lb, ub, color_mean=None, color_shading=None):\n",
|
||
|
" # plot the shaded range of the confidence intervals\n",
|
||
|
" plt.fill_between(range(mean.shape[0]), ub, lb,\n",
|
||
|
" color=color_shading, alpha=.5)\n",
|
||
|
" # plot the mean on top\n",
|
||
|
" plt.plot(mean, color_mean)\n",
|
||
|
" \n",
|
||
|
"# generate 3 sets of random means and confidence intervals to plot\n",
|
||
|
"mean0 = np.random.random(50)\n",
|
||
|
"ub0 = mean0 + np.random.random(50) + .5\n",
|
||
|
"lb0 = mean0 - np.random.random(50) - .5\n",
|
||
|
" \n",
|
||
|
"mean1 = np.random.random(50) + 2\n",
|
||
|
"ub1 = mean1 + np.random.random(50) + .5\n",
|
||
|
"lb1 = mean1 - np.random.random(50) - .5\n",
|
||
|
" \n",
|
||
|
"mean2 = np.random.random(50) -1\n",
|
||
|
"ub2 = mean2 + np.random.random(50) + .5\n",
|
||
|
"lb2 = mean2 - np.random.random(50) - .5\n",
|
||
|
" \n",
|
||
|
"# plot the data\n",
|
||
|
"fig = plt.figure(1, figsize=(7, 2.5))\n",
|
||
|
"plot_mean_and_CI(mean0, ub0, lb0, color_mean='k', color_shading='k')\n",
|
||
|
"plot_mean_and_CI(mean1, ub1, lb1, color_mean='b', color_shading='b')\n",
|
||
|
"plot_mean_and_CI(mean2, ub2, lb2, color_mean='g--', color_shading='g')\n",
|
||
|
" \n",
|
||
|
"class LegendObject(object):\n",
|
||
|
" def __init__(self, facecolor='red', edgecolor='white', dashed=False):\n",
|
||
|
" self.facecolor = facecolor\n",
|
||
|
" self.edgecolor = edgecolor\n",
|
||
|
" self.dashed = dashed\n",
|
||
|
" \n",
|
||
|
" def legend_artist(self, legend, orig_handle, fontsize, handlebox):\n",
|
||
|
" x0, y0 = handlebox.xdescent, handlebox.ydescent\n",
|
||
|
" width, height = handlebox.width, handlebox.height\n",
|
||
|
" patch = mpatches.Rectangle(\n",
|
||
|
" # create a rectangle that is filled with color\n",
|
||
|
" [x0, y0], width, height, facecolor=self.facecolor,\n",
|
||
|
" # and whose edges are the faded color\n",
|
||
|
" edgecolor=self.edgecolor, lw=3)\n",
|
||
|
" handlebox.add_artist(patch)\n",
|
||
|
" \n",
|
||
|
" # if we're creating the legend for a dashed line,\n",
|
||
|
" # manually add the dash in to our rectangle\n",
|
||
|
" if self.dashed:\n",
|
||
|
" patch1 = mpatches.Rectangle(\n",
|
||
|
" [x0 + 2*width/5, y0], width/5, height, facecolor=self.edgecolor,\n",
|
||
|
" transform=handlebox.get_transform())\n",
|
||
|
" handlebox.add_artist(patch1)\n",
|
||
|
" \n",
|
||
|
" return patch\n",
|
||
|
" \n",
|
||
|
"bg = np.array([1, 1, 1]) # background of the legend is white\n",
|
||
|
"colors = ['black', 'blue', 'green']\n",
|
||
|
"# with alpha = .5, the faded color is the average of the background and color\n",
|
||
|
"colors_faded = [(np.array(cc.to_rgb(color)) + bg) / 2.0 for color in colors]\n",
|
||
|
" \n",
|
||
|
"plt.legend([0, 1, 2], ['Data 0', 'Data 1', 'Data 2'],\n",
|
||
|
" handler_map={\n",
|
||
|
" 0: LegendObject(colors[0], colors_faded[0]),\n",
|
||
|
" 1: LegendObject(colors[1], colors_faded[1]),\n",
|
||
|
" 2: LegendObject(colors[2], colors_faded[2], dashed=True),\n",
|
||
|
" })\n",
|
||
|
" \n",
|
||
|
"plt.title('Example mean and confidence interval plot')\n",
|
||
|
"plt.tight_layout()\n",
|
||
|
"plt.grid()\n",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/plain": [
|
||
|
"array([0.37747772, 0.07693753, 0.1940634 , 0.15176569, 0.14293999,\n",
|
||
|
" 0.60894227, 0.09985447, 0.41118113, 0.68274936, 0.85285374,\n",
|
||
|
" 0.4541564 , 0.63333913, 0.35620657, 0.51059929, 0.85266049,\n",
|
||
|
" 0.23237531, 0.23283028, 0.47911222, 0.40544178, 0.81126309,\n",
|
||
|
" 0.86811543, 0.35334637, 0.86403165, 0.86593378, 0.25916208,\n",
|
||
|
" 0.21492518, 0.92107401, 0.32022366, 0.93038498, 0.4327189 ,\n",
|
||
|
" 0.24912534, 0.77540019, 0.13939365, 0.79231252, 0.65351859,\n",
|
||
|
" 0.11080199, 0.48425663, 0.7100898 , 0.02117045, 0.41127722,\n",
|
||
|
" 0.16392522, 0.32550661, 0.95452695, 0.42164106, 0.22468096,\n",
|
||
|
" 0.65491521, 0.36794668, 0.78792547, 0.17727132, 0.82141194])"
|
||
|
]
|
||
|
},
|
||
|
"execution_count": 2,
|
||
|
"metadata": {},
|
||
|
"output_type": "execute_result"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"mean0"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"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.8.5"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 4
|
||
|
}
|