{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from numpy import random"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 1: Tufte Style Box+Whiskers"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
" C | \n",
" D | \n",
" E | \n",
" F | \n",
" G | \n",
" H | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 5.816951 | \n",
" 4.354197 | \n",
" 5.014316 | \n",
" 4.944332 | \n",
" 5.268459 | \n",
" 4.127929 | \n",
" 4.495678 | \n",
" 6.285195 | \n",
"
\n",
" \n",
" 1 | \n",
" 5.140925 | \n",
" 5.384016 | \n",
" 4.585007 | \n",
" 5.698897 | \n",
" 3.753989 | \n",
" 4.385816 | \n",
" 5.595906 | \n",
" 5.910020 | \n",
"
\n",
" \n",
" 2 | \n",
" 3.973697 | \n",
" 4.270081 | \n",
" 5.344023 | \n",
" 6.379101 | \n",
" 6.241163 | \n",
" 4.133344 | \n",
" 6.699746 | \n",
" 3.925451 | \n",
"
\n",
" \n",
" 3 | \n",
" 5.723197 | \n",
" 5.890564 | \n",
" 4.528252 | \n",
" 6.288667 | \n",
" 4.873346 | \n",
" 5.236624 | \n",
" 5.074247 | \n",
" 5.054928 | \n",
"
\n",
" \n",
" 4 | \n",
" 5.319266 | \n",
" 4.843160 | \n",
" 5.366703 | \n",
" 4.274235 | \n",
" 3.926008 | \n",
" 4.957835 | \n",
" 7.711974 | \n",
" 4.995974 | \n",
"
\n",
" \n",
" 5 | \n",
" 4.795188 | \n",
" 5.731934 | \n",
" 3.759910 | \n",
" 4.874946 | \n",
" 3.977707 | \n",
" 4.284435 | \n",
" 5.820949 | \n",
" 6.194236 | \n",
"
\n",
" \n",
" 6 | \n",
" 6.130495 | \n",
" 1.754058 | \n",
" 4.924919 | \n",
" 5.250145 | \n",
" 5.244639 | \n",
" 5.101537 | \n",
" 6.141814 | \n",
" 5.193609 | \n",
"
\n",
" \n",
" 7 | \n",
" 5.104017 | \n",
" 5.400567 | \n",
" 4.318200 | \n",
" 4.306453 | \n",
" 6.280427 | \n",
" 6.555387 | \n",
" 6.585680 | \n",
" 4.189265 | \n",
"
\n",
" \n",
" 8 | \n",
" 6.030186 | \n",
" 5.208992 | \n",
" 4.528060 | \n",
" 5.024145 | \n",
" 4.610665 | \n",
" 3.610316 | \n",
" 3.984090 | \n",
" 4.892341 | \n",
"
\n",
" \n",
" 9 | \n",
" 4.961964 | \n",
" 5.812331 | \n",
" 3.388120 | \n",
" 6.822580 | \n",
" 5.383096 | \n",
" 2.459424 | \n",
" 6.806711 | \n",
" 5.510672 | \n",
"
\n",
" \n",
" 10 | \n",
" 5.478655 | \n",
" 5.567332 | \n",
" 4.066557 | \n",
" 6.074857 | \n",
" 6.760632 | \n",
" 5.683561 | \n",
" 6.237218 | \n",
" 2.985190 | \n",
"
\n",
" \n",
" 11 | \n",
" 4.261113 | \n",
" 7.166819 | \n",
" 5.423207 | \n",
" 6.093811 | \n",
" 4.994752 | \n",
" 4.670659 | \n",
" 5.987789 | \n",
" 2.215282 | \n",
"
\n",
" \n",
" 12 | \n",
" 5.201085 | \n",
" 4.851406 | \n",
" 4.682030 | \n",
" 3.602403 | \n",
" 4.634048 | \n",
" 4.589244 | \n",
" 4.543679 | \n",
" 4.680432 | \n",
"
\n",
" \n",
" 13 | \n",
" 4.312412 | \n",
" 6.617821 | \n",
" 5.172933 | \n",
" 4.243390 | \n",
" 3.866812 | \n",
" 5.568476 | \n",
" 3.870093 | \n",
" 6.613179 | \n",
"
\n",
" \n",
" 14 | \n",
" 4.265170 | \n",
" 5.080882 | \n",
" 3.595370 | \n",
" 3.391088 | \n",
" 3.928088 | \n",
" 5.606241 | \n",
" 4.995347 | \n",
" 4.873159 | \n",
"
\n",
" \n",
" 15 | \n",
" 3.112553 | \n",
" 4.018332 | \n",
" 5.450781 | \n",
" 4.662063 | \n",
" 3.935943 | \n",
" 4.965459 | \n",
" 5.582554 | \n",
" 6.837429 | \n",
"
\n",
" \n",
" 16 | \n",
" 5.369033 | \n",
" 5.311757 | \n",
" 4.306653 | \n",
" 5.185948 | \n",
" 4.138951 | \n",
" 5.972153 | \n",
" 5.839915 | \n",
" 3.526673 | \n",
"
\n",
" \n",
" 17 | \n",
" 4.497646 | \n",
" 4.407245 | \n",
" 5.702950 | \n",
" 4.794317 | \n",
" 5.983328 | \n",
" 6.257530 | \n",
" 7.155495 | \n",
" 4.816282 | \n",
"
\n",
" \n",
" 18 | \n",
" 4.818714 | \n",
" 3.246948 | \n",
" 4.630178 | \n",
" 3.395023 | \n",
" 3.886652 | \n",
" 5.151510 | \n",
" 6.368907 | \n",
" 1.870367 | \n",
"
\n",
" \n",
" 19 | \n",
" 5.871599 | \n",
" 4.733323 | \n",
" 4.987047 | \n",
" 5.165873 | \n",
" 4.668263 | \n",
" 3.479415 | \n",
" 5.938720 | \n",
" 6.275684 | \n",
"
\n",
" \n",
" 20 | \n",
" 6.354728 | \n",
" 4.036087 | \n",
" 5.009182 | \n",
" 6.595682 | \n",
" 5.356226 | \n",
" 5.269646 | \n",
" 4.548096 | \n",
" 4.632888 | \n",
"
\n",
" \n",
" 21 | \n",
" 4.784111 | \n",
" 6.358432 | \n",
" 7.049450 | \n",
" 3.907292 | \n",
" 5.436143 | \n",
" 4.328879 | \n",
" 4.688403 | \n",
" 6.334957 | \n",
"
\n",
" \n",
" 22 | \n",
" 4.149367 | \n",
" 3.926702 | \n",
" 4.340054 | \n",
" 4.543143 | \n",
" 3.998085 | \n",
" 4.542539 | \n",
" 6.307795 | \n",
" 4.257889 | \n",
"
\n",
" \n",
" 23 | \n",
" 6.109732 | \n",
" 5.541091 | \n",
" 5.142267 | \n",
" 4.134215 | \n",
" 5.360157 | \n",
" 4.848468 | \n",
" 3.314067 | \n",
" 5.714349 | \n",
"
\n",
" \n",
" 24 | \n",
" 4.398707 | \n",
" 4.526739 | \n",
" 4.448023 | \n",
" 4.110701 | \n",
" 6.140705 | \n",
" 3.683653 | \n",
" 4.941240 | \n",
" 4.754220 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B C D E F G \\\n",
"0 5.816951 4.354197 5.014316 4.944332 5.268459 4.127929 4.495678 \n",
"1 5.140925 5.384016 4.585007 5.698897 3.753989 4.385816 5.595906 \n",
"2 3.973697 4.270081 5.344023 6.379101 6.241163 4.133344 6.699746 \n",
"3 5.723197 5.890564 4.528252 6.288667 4.873346 5.236624 5.074247 \n",
"4 5.319266 4.843160 5.366703 4.274235 3.926008 4.957835 7.711974 \n",
"5 4.795188 5.731934 3.759910 4.874946 3.977707 4.284435 5.820949 \n",
"6 6.130495 1.754058 4.924919 5.250145 5.244639 5.101537 6.141814 \n",
"7 5.104017 5.400567 4.318200 4.306453 6.280427 6.555387 6.585680 \n",
"8 6.030186 5.208992 4.528060 5.024145 4.610665 3.610316 3.984090 \n",
"9 4.961964 5.812331 3.388120 6.822580 5.383096 2.459424 6.806711 \n",
"10 5.478655 5.567332 4.066557 6.074857 6.760632 5.683561 6.237218 \n",
"11 4.261113 7.166819 5.423207 6.093811 4.994752 4.670659 5.987789 \n",
"12 5.201085 4.851406 4.682030 3.602403 4.634048 4.589244 4.543679 \n",
"13 4.312412 6.617821 5.172933 4.243390 3.866812 5.568476 3.870093 \n",
"14 4.265170 5.080882 3.595370 3.391088 3.928088 5.606241 4.995347 \n",
"15 3.112553 4.018332 5.450781 4.662063 3.935943 4.965459 5.582554 \n",
"16 5.369033 5.311757 4.306653 5.185948 4.138951 5.972153 5.839915 \n",
"17 4.497646 4.407245 5.702950 4.794317 5.983328 6.257530 7.155495 \n",
"18 4.818714 3.246948 4.630178 3.395023 3.886652 5.151510 6.368907 \n",
"19 5.871599 4.733323 4.987047 5.165873 4.668263 3.479415 5.938720 \n",
"20 6.354728 4.036087 5.009182 6.595682 5.356226 5.269646 4.548096 \n",
"21 4.784111 6.358432 7.049450 3.907292 5.436143 4.328879 4.688403 \n",
"22 4.149367 3.926702 4.340054 4.543143 3.998085 4.542539 6.307795 \n",
"23 6.109732 5.541091 5.142267 4.134215 5.360157 4.848468 3.314067 \n",
"24 4.398707 4.526739 4.448023 4.110701 6.140705 3.683653 4.941240 \n",
"\n",
" H \n",
"0 6.285195 \n",
"1 5.910020 \n",
"2 3.925451 \n",
"3 5.054928 \n",
"4 4.995974 \n",
"5 6.194236 \n",
"6 5.193609 \n",
"7 4.189265 \n",
"8 4.892341 \n",
"9 5.510672 \n",
"10 2.985190 \n",
"11 2.215282 \n",
"12 4.680432 \n",
"13 6.613179 \n",
"14 4.873159 \n",
"15 6.837429 \n",
"16 3.526673 \n",
"17 4.816282 \n",
"18 1.870367 \n",
"19 6.275684 \n",
"20 4.632888 \n",
"21 6.334957 \n",
"22 4.257889 \n",
"23 5.714349 \n",
"24 4.754220 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = DataFrame(random.normal(5, 1, size=(25,8)), columns=list(\"ABCDEFGH\"))\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 5.039220\n",
"B 4.961633\n",
"C 4.790568\n",
"D 4.950532\n",
"E 4.905931\n",
"F 4.778803\n",
"G 5.569445\n",
"H 4.901587\n",
"dtype: float64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.mean(axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"matplotlib.rcParams[\"font.size\"] = 16"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ax = plt.subplots()[1]\n",
"ax.spines['right'].set_visible(False)\n",
"ax.spines['top'].set_visible(False)\n",
"\n",
"plt.xlabel(\"X label here\")\n",
"plt.ylabel(\"Y label here\")\n",
"\n",
"ax.set_xlim(0.5, len(df.columns)+0.5)\n",
"ax.set_ylim(0, 8)\n",
"ax.set_xticklabels(list(df.columns))\n",
"ax.set_xticks(range(1, len(df.columns)+1))\n",
"\n",
"for i, col in enumerate(df.columns):\n",
" s = df[col]\n",
" \n",
" # mean\n",
" x = i+1\n",
" y = s.quantile(0.5)\n",
" ax.plot(x, y, 'ro')\n",
" \n",
" y1 = s.quantile(0.75)\n",
" y2 = s.quantile(1)\n",
" ax.plot((x, x), (y1, y2), 'k')\n",
" \n",
" y1 = s.quantile(0)\n",
" y2 = s.quantile(0.25)\n",
" ax.plot((x, x), (y1, y2), 'k')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 2: Std Dev Ranges"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"dfs = []\n",
"\n",
"for i in range(5):\n",
" df = DataFrame()\n",
" df[\"x\"] = list(range(4))\n",
" df[\"A\"] = df[\"x\"] + random.normal(size=4) * 0.2\n",
" df[\"B\"] = 2 + random.normal(size=4) * 0.3\n",
" df[\"trial\"] = i\n",
" dfs.append(df)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" x | \n",
" A | \n",
" B | \n",
" trial | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" -0.250173 | \n",
" 1.576447 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1.061277 | \n",
" 2.089403 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 1.668585 | \n",
" 1.485925 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" 2.769240 | \n",
" 1.733016 | \n",
" 0 | \n",
"
\n",
" \n",
" 0 | \n",
" 0 | \n",
" 0.025520 | \n",
" 1.886120 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1.267888 | \n",
" 1.809673 | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 2.083532 | \n",
" 1.878483 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" 2.870992 | \n",
" 2.597568 | \n",
" 1 | \n",
"
\n",
" \n",
" 0 | \n",
" 0 | \n",
" 0.296073 | \n",
" 1.694059 | \n",
" 2 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1.188875 | \n",
" 2.432131 | \n",
" 2 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 2.036837 | \n",
" 1.819796 | \n",
" 2 | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" 2.783269 | \n",
" 2.108234 | \n",
" 2 | \n",
"
\n",
" \n",
" 0 | \n",
" 0 | \n",
" -0.004710 | \n",
" 2.115809 | \n",
" 3 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1.068703 | \n",
" 1.467082 | \n",
" 3 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 2.193544 | \n",
" 2.041147 | \n",
" 3 | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" 3.337262 | \n",
" 1.778743 | \n",
" 3 | \n",
"
\n",
" \n",
" 0 | \n",
" 0 | \n",
" -0.233613 | \n",
" 2.250526 | \n",
" 4 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1.142650 | \n",
" 1.996993 | \n",
" 4 | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" 1.748166 | \n",
" 2.321381 | \n",
" 4 | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" 2.760914 | \n",
" 2.105326 | \n",
" 4 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" x A B trial\n",
"0 0 -0.250173 1.576447 0\n",
"1 1 1.061277 2.089403 0\n",
"2 2 1.668585 1.485925 0\n",
"3 3 2.769240 1.733016 0\n",
"0 0 0.025520 1.886120 1\n",
"1 1 1.267888 1.809673 1\n",
"2 2 2.083532 1.878483 1\n",
"3 3 2.870992 2.597568 1\n",
"0 0 0.296073 1.694059 2\n",
"1 1 1.188875 2.432131 2\n",
"2 2 2.036837 1.819796 2\n",
"3 3 2.783269 2.108234 2\n",
"0 0 -0.004710 2.115809 3\n",
"1 1 1.068703 1.467082 3\n",
"2 2 2.193544 2.041147 3\n",
"3 3 3.337262 1.778743 3\n",
"0 0 -0.233613 2.250526 4\n",
"1 1 1.142650 1.996993 4\n",
"2 2 1.748166 2.321381 4\n",
"3 3 2.760914 2.105326 4"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.concat(dfs)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" trial | \n",
" x | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" -0.250173 | \n",
" 1.576447 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.061277 | \n",
" 2.089403 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.668585 | \n",
" 1.485925 | \n",
"
\n",
" \n",
" 3 | \n",
" 2.769240 | \n",
" 1.733016 | \n",
"
\n",
" \n",
" 1 | \n",
" 0 | \n",
" 0.025520 | \n",
" 1.886120 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.267888 | \n",
" 1.809673 | \n",
"
\n",
" \n",
" 2 | \n",
" 2.083532 | \n",
" 1.878483 | \n",
"
\n",
" \n",
" 3 | \n",
" 2.870992 | \n",
" 2.597568 | \n",
"
\n",
" \n",
" 2 | \n",
" 0 | \n",
" 0.296073 | \n",
" 1.694059 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.188875 | \n",
" 2.432131 | \n",
"
\n",
" \n",
" 2 | \n",
" 2.036837 | \n",
" 1.819796 | \n",
"
\n",
" \n",
" 3 | \n",
" 2.783269 | \n",
" 2.108234 | \n",
"
\n",
" \n",
" 3 | \n",
" 0 | \n",
" -0.004710 | \n",
" 2.115809 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.068703 | \n",
" 1.467082 | \n",
"
\n",
" \n",
" 2 | \n",
" 2.193544 | \n",
" 2.041147 | \n",
"
\n",
" \n",
" 3 | \n",
" 3.337262 | \n",
" 1.778743 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" -0.233613 | \n",
" 2.250526 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.142650 | \n",
" 1.996993 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.748166 | \n",
" 2.321381 | \n",
"
\n",
" \n",
" 3 | \n",
" 2.760914 | \n",
" 2.105326 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"trial x \n",
"0 0 -0.250173 1.576447\n",
" 1 1.061277 2.089403\n",
" 2 1.668585 1.485925\n",
" 3 2.769240 1.733016\n",
"1 0 0.025520 1.886120\n",
" 1 1.267888 1.809673\n",
" 2 2.083532 1.878483\n",
" 3 2.870992 2.597568\n",
"2 0 0.296073 1.694059\n",
" 1 1.188875 2.432131\n",
" 2 2.036837 1.819796\n",
" 3 2.783269 2.108234\n",
"3 0 -0.004710 2.115809\n",
" 1 1.068703 1.467082\n",
" 2 2.193544 2.041147\n",
" 3 3.337262 1.778743\n",
"4 0 -0.233613 2.250526\n",
" 1 1.142650 1.996993\n",
" 2 1.748166 2.321381\n",
" 3 2.760914 2.105326"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df.set_index([\"trial\", \"x\"])\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"trial x\n",
"0 0 0.663137\n",
" 1 1.575340\n",
" 2 1.577255\n",
" 3 2.251128\n",
"1 0 0.955820\n",
" 1 1.538780\n",
" 2 1.981007\n",
" 3 2.734280\n",
"2 0 0.995066\n",
" 1 1.810503\n",
" 2 1.928317\n",
" 3 2.445751\n",
"3 0 1.055549\n",
" 1 1.267893\n",
" 2 2.117345\n",
" 3 2.558002\n",
"4 0 1.008456\n",
" 1 1.569822\n",
" 2 2.034773\n",
" 3 2.433120\n",
"dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.mean(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"A 1.490742\n",
"B 1.959393\n",
"dtype: float64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.mean(axis=0)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" x | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" -0.033381 | \n",
" 1.904592 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.145879 | \n",
" 1.959057 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.946133 | \n",
" 1.909347 | \n",
"
\n",
" \n",
" 3 | \n",
" 2.904335 | \n",
" 2.064577 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"x \n",
"0 -0.033381 1.904592\n",
"1 1.145879 1.959057\n",
"2 1.946133 1.909347\n",
"3 2.904335 2.064577"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mean = df.mean(level=1)\n",
"mean"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" A | \n",
" B | \n",
"
\n",
" \n",
" x | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.223564 | \n",
" 0.281348 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.086398 | \n",
" 0.355873 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.226131 | \n",
" 0.306350 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.245975 | \n",
" 0.346150 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" A B\n",
"x \n",
"0 0.223564 0.281348\n",
"1 0.086398 0.355873\n",
"2 0.226131 0.306350\n",
"3 0.245975 0.346150"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"std = df.std(level=1)\n",
"std"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"ax = None\n",
"colors = [\"black\", \"gray\"]\n",
"for col in reversed(df.columns):\n",
" ax = mean[col].plot.line(color=colors.pop(0), ax=ax)\n",
" plt.fill_between(mean.index, mean[col]-std[col], mean[col]+std[col],\n",
" color='black', alpha=0.1)\n",
" \n",
"ax.legend(frameon=False, ncol=2)\n",
"ax.set_xlabel(\"x label here\")\n",
"ax.set_ylabel(\"y label here\")\n",
"ax.spines['right'].set_visible(False)\n",
"ax.spines['top'].set_visible(False)"
]
},
{
"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.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}