{
"cells": [
{
"cell_type": "markdown",
"id": "05b12869",
"metadata": {},
"source": [
"# Making a bar graph in plotnine\n",
"\n",
"## Basic bar chart\n",
"\n",
"Making a bar graph in plotnine is a tiny bit more difficult than other charts.\n",
"\n",
"Usually you'll want your data organized up so that each row will be its own bar. In this dataset, each type of animal is going to get its own bar:"
]
},
{
"cell_type": "code",
"execution_count": 145,
"id": "8cc924b7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" ggplot(df)\n",
" + aes(x='species', y='num_animals')\n",
" + geom_bar(stat='identity')\n",
")"
]
},
{
"cell_type": "markdown",
"id": "944aa586",
"metadata": {},
"source": [
"The little extra bit we added was `stat='identity'`. It means \"just plot the y axis like you would expect it to be plotted.\"\n",
"\n",
"What's the alternative?? Glad you asked!"
]
},
{
"cell_type": "markdown",
"id": "047a3047",
"metadata": {},
"source": [
"## Aggregate bar chart (median)\n",
"\n",
"A lot of the time your data isn't set up like you want it to be set up. Say for example we have a bunch of countries with life expectancies. Want we want to plot is different, though: we want the median life expectancy per continent."
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "fbc6e19e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
country
\n",
"
continent
\n",
"
gdp_per_capita
\n",
"
life_expectancy
\n",
"
population
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Afghanistan
\n",
"
Asia
\n",
"
663
\n",
"
54.863
\n",
"
22856302
\n",
"
\n",
"
\n",
"
1
\n",
"
Albania
\n",
"
Europe
\n",
"
4195
\n",
"
74.200
\n",
"
3071856
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" country continent gdp_per_capita life_expectancy population\n",
"0 Afghanistan Asia 663 54.863 22856302\n",
"1 Albania Europe 4195 74.200 3071856"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"from plotnine import *\n",
"\n",
"df = pd.read_csv('countries.csv')\n",
"df.head(2)"
]
},
{
"cell_type": "markdown",
"id": "34b8782b",
"metadata": {},
"source": [
"Instead of telling `geom_bar` to plot the identity (the normal actual value), we tell it to plot a **summary statistic**. Which summary statistic? The median, using numpy's `np.median`."
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "792f39af",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGuCAYAAACOdTzBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1fElEQVR4nO3de1yUdd7/8feAMMIIoSkKpqLdm2VleT4fyrR1S1FTU7PNPKdl7qrbrVlmapbWXVZU7qqU58xTtrZmkmZqZmoHtYNaiCcSUBCU8/D9/eGv2QhUmBkcLns9Hw8eeR3mms/14QLefa/rmstmjDECAACwED9fFwAAAFBaBBgAAGA5BBgAAGA5BBgAAGA5BBgAAGA5BBgAAGA5BBgAAGA5BBgAAGA5FXxdQFlKSUnxdQlus9lsCgoKUlZWlviswdKjf56hf56hf56hf565GvpXtWrVy67DCEw55efnp+DgYPn58S1yB/3zDP3zDP3zDP3zzB+lf1f33gEAgKsSAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFgOAQYAAFhOBV8XAOCCMWPG+LqEcu3VV1/1dQkAyhFGYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOUQYAAAgOVU8HUBAOANY8aM8XUJ5dqrr77q6xKuahx/l1YWxx8BBl7DD/Cl8QcEALyHU0gAAMByruoRmMDAQNntdl+X4RabzSZJcjgcMsb4uBp4Q0hIiK9LsDT65xkr9Y/ff1efsjj+ruoAk5ubq9zcXF+X4RZ/f38FBgbq/Pnzcjqdvi4HXpCRkeHrEiyN/nnGSv3j99/Vp7THX0kGHziFBAAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALOeq/iReAEDJ8DDWS+NhrOUPIzAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByCDAAAMByKvi6gN/asWOHli5dqlOnTik0NFRDhgxR69atlZCQoNdee01HjhxR9erVNXz4cN12222+LhcAAPhIuQkw33zzjebNm6fx48frxhtvVHp6urKzs5Wfn69p06apS5cumjlzpnbu3KmZM2fqrbfeUlhYmK/LBgAAPlBuTiEtXbpU999/vxo0aCA/Pz+FhYWpRo0a2rdvn3JyctS7d28FBASoXbt2ql27trZv3+7rkgEAgI+UixEYp9OpQ4cOqXnz5ho5cqSys7PVqFEjDR06VEePHlVUVJT8/P6bterVq6eEhIQi20lMTFRiYqJr2m63KzIy8orsg7f5+/sX+i+sj++lZ+ifZ+ifZ+ifZ8qif+UiwKSlpSk/P19bt27V9OnTVbFiRb300kuaN2+eqlevLofDUWh9h8OhpKSkItuZO3eupk6d6pqeNGmSZsyYUeb1l6XQ0FBflwAvqVy5sq9LsDT65xn65xn655my6F+5CDB2u12SdM8996hq1aqSpD59+ui5555Tnz59dP78+ULrnz9/XkFBQUW2M2LECHXv3r3QdlNTU8uw8rLj7++v0NBQpaeny+l0+roceIFVj8Xygv55hv55hv55prT9K0ngKRcBplKlSqpatapsNluRZbVr19aqVatUUFDgOo0UHx+v9u3bF1k3IiJCERERrumUlBTL//F3Op2W3wdcwPfRM/TPM/TPM/TPM2XRv3JzEW+XLl20fv16paamKjMzU6tWrVLz5s116623KjAwUKtXr1ZeXp62bdumhIQEtWnTxtclAwAAHykXIzDShVNG6enpGj16tPz9/dW0aVMNHTpUFSpU0OTJk/X6669r+fLlCg8P18SJE7mFGgCAP7ByE2D8/f01fPhwDR8+vMiyqKgovfjiiz6oCgAAlEfl5hQSAABASRFgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5RBgAACA5VTwdQHlyZgxY3xdQrn26quv+roEAAAkMQIDAAAsiAADAAAshwADAAAsx+0AY4zxZh0AAAAl5naAqVWrliZPnqyffvrJm/UAAABcltsB5oEHHlBsbKxuuOEGdezYUYsWLVJWVpY3awMAACiW2wHmhRde0LFjx7R27Vpde+21Gjp0qCIiIjRixAjt2rXLmzUCAAAU4tFFvH5+furWrZtWrVqlEydOaMqUKdq+fbtatWqlW2+9Va+88orS0tK8VCoAAMAFXvsgu19++UXHjh1TUlKSAgMDVbNmTT399NN65plntHDhQnXv3t1bb1VigYGBstvtV/x9r1YhISG+LsHS6J9n6J9n6J9n6J9nyqJ/HgWYjIwMLV26VAsWLNDu3bvVoEEDTZ48WQ8++KAqV66s9PR0PfbYYxozZoxPAkxubq5yc3Ov+PterTIyMnxdgqXRP8/QP8/QP8/QP8+Utn8lGXxwO8A8+OCDWrNmjSTp/vvv15w5c9SyZctC64SGhmrUqFFatGiRu28DAABQhNsB5vvvv9dLL72kAQMGXHJo6Oabb9bmzZvdfRsAAIAi3A4wu3fvLtF6lSpVUocOHdx9GwAAgCLcvgspLi5OsbGxxS57++23GXUBAABlxu0A8+STT+rUqVPFLktOTtbkyZPdLgoAAOBS3A4w3333nZo2bVrsssaNG+vAgQNuFwUAAHApbgcYm82ms2fPFrssNTVVTqfT7aIAAAAuxe0A06JFC8XExBR5KrUxRm+88YZatGjhcXEAAADFcfsupKlTp+qOO+5Qw4YNNWjQIEVEROjkyZNauHChDh48qC1btnixTAAAgP9yO8C0atVKcXFx+sc//qEnnnhCBQUF8vPzc83//YfaAQAAeItHjxJo06aNtm/frqysLKWmpiosLEzBwcHeqg0AAKBYXnmYY1BQkIKCgryxKQAAgMvyKMBs3LhRK1eu1PHjx5WdnV1omc1mU1xcnEfFAQAAFMftADN79mw98cQTioqK0k033aRrrrnGm3UBAABclNsBJiYmRo8++qheffVVb9YDAABwWW5/DsyZM2fUo0cPL5YCAABQMm4HmG7dumnbtm3erAUAAKBE3D6F9PDDD+uRRx5RVlaWOnfurLCwsCLrNG7c2JPaAAAAiuV2gOnSpYsk6YUXXtALL7wgm83mWmaMkc1m43lIAACgTLgdYDZv3uzNOgAAAErM7QDToUMHb9YBAABQYm5fxAsAAOArHgWYRYsWqW3btgoPD1doaGiRLwAAgLLgdoBZvHixhg0bpltuuUUpKSnq27ev7rvvPgUGBio8PFzjx4/3Zp0AAAAubgeYl156SU899ZRiYmIkSaNGjVJsbKzi4+NVrVo1VapUyWtFAgAA/JbbAebQoUNq06aN/P395e/vr/T0dElSSEiInnjiCR4xAAAAyozbAeaaa65RTk6OJKlmzZr67rvvXMucTqdOnz7teXUAAADFcPs26qZNm+rbb7/V3Xffre7du2vq1KkqKChQQECAnn/+ebVs2dKbdQIAALi4HWAmTpyohIQESdKzzz6rhIQEjR07VgUFBWrWrJneeustrxUJAADwW24HmJYtW7pGWcLCwvT+++8rJydHOTk53EINAADKlNvXwAwePFjx8fGF5tntdoWGhiohIUGDBw/2uDgAAIDiuB1g3n77bSUnJxe7LCUlRe+8847bRQEAAFyKR5/E+9snUP/WoUOHdO2113qyaQAAgIsq1TUwb775pt58801JF8LLgAEDFBQUVGid7OxsHTlyRH369PFelQAAAL9RqgATGRmpJk2aSJL279+v+vXrq1q1aoXWCQwM1E033aQhQ4Z4r0oAAIDfKFWAiY6OVnR0tGv6qaeeUr169bxeFAAAwKW4fRt1bGysN+sAAAAoMY9uo77//vuLXdavXz8NHz7cre2mp6frgQceKPQ064SEBI0fP169e/fW6NGj9c0337i1bQAAcHVwO8B8/PHH6tWrV7HL7rvvPn300UdubTc2Nla1atVyTefn52vatGlq3ry5li1bpn79+mnmzJlKS0tza/sAAMD63A4wycnJRS7g/dW1116rU6dOlXqb+/fv18mTJ3XXXXe55u3bt085OTnq3bu3AgIC1K5dO9WuXVvbt293t3QAAGBxbgeYmjVr6osvvih22RdffKGIiIhSbS8vL09z587VyJEjC32+zNGjRxUVFSU/v/+WWq9ePddzmAAAwB+P2xfx9u/fXzNmzND111+vvn37uua/9957eu655zRmzJhSbW/VqlW67bbbVLduXf3888+u+VlZWXI4HIXW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V14x2dnZ5vDhw6ZHjx5m0qRJ5sSJEyYrK8uMGzfOvPvuu8YYY06fPm0GDBhgPv/8c5Ofn29++OEH079/f3P06FFjzIW/SX369DHffPONKSgocP0emDVrljHGmOTkZHP//febTZs2mdzcXHP+/Hnzww8/GGN812NjjOEUUhk5dOiQjh49qg4dOqhatWq6+eabtWnTpouuf/3116t9+/by8/OT3W4vtOzLL79UcHCw+vbtK7vdLrvdrgYNGkiSKlWqpDZt2shutysoKEi9e/fWgQMHynTffOVSPa1QoYKSkpJ05swZBQYGuvrze7fccovq1q0rPz8/RUVFqX379tq/f/+V3I0yM3/+fPXv39/1VdJTSGFhYerZs6cqVKggu92uLVu2qF+/frr22mvlcDg0aNAgffbZZ8rLy3O9pnfv3goLC1NYWJj69u2rTz/9VJK0YcMGde7cWQ0aNJCfn5+aNWumunXravfu3WWyz5fTs2dPHTp0yK3vcUl+hm+88Ua1aNFC/v7+at++vZKTk9W/f3/Z7XbVr19f4eHhOnLkiCTpP//5jwYOHKjq1aurQoUK6t+/vw4dOqTk5GTX9u677z6FhYUV+R0gXejtwIEDVadOHdlsNkVGRio8PFyS1LRpU0VGRspms+nmm29W48aNy/S4Tk9PV2hoqCpUKDqIX7lyZaWnp2vjxo2644471KxZM/n7+ys0NNQ1gnC5XnTs2FGhoaHy9/dXdHS08vPzdezYMdd73HjjjWrVqpX8/f115513KiUlRenp6UVqqVGjhho1aqSAgACFhoaqe/fuV+T3Y3BwsGbNmiW73a633npLDz30kJ588kmdPHmyxNuIi4tThw4dJF3ox6efflroZ1CS+vXrJ7vdruuvv17XXXedGjVqpMjISFWsWFHNmzfXzz//LOnCtUq33XabWrZsKX9/f9WvX18tW7bU9u3bXdtq1qyZGjZsKJvNVuT427Jlixo0aKBOnTopICBAwcHBql+/viTf9VjiFFKZiYuL00033aTq1atLunAAvvPOOxo8eHCx6//6i6g4ycnJF/1AopycHM2bN0979+51nXfOyspSXl6ea0j/anGpno4ZM0ZLly7V3/72N9cQeufOnYts48cff9TChQuVkJCg/Px85eXlqWXLlld6V8rEkCFD1LVr10Lz9u3bd9nXVa1atdD1WGfOnHH1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AAAshxEYAABgOQQYAABgOQQYAABgOQQYAABgOQQYAABgOQQYAABgOQQYAFdcWlqannnmmSIPiDty5IhsNlupnlvkbRerDUD5QoABcMWlpaVp6tSpRUJCRESEPv/8c915550+quzitQEoX3iYI4Byw263q2XLlr4uA4AFMAIDoJDPP/9cXbp0UWhoqEJCQtSiRQt9/PHHkqQzZ85o8ODBqlq1qoKCgtS6dWtt3bq10Os7duyoe++9VytXrlT9+vVVqVIl3Xnnnfrpp58kXThNVLduXUkXnnxts9lks9l05MiRYk8hRUVF6dFHH1VMTIzq1Kmja665Rj169FBycnKh901LS9OoUaMUERHhejLyxo0bvVYbgPKFAAPAZfv27erYsaNycnI0b948rVq1StHR0Tp69KicTqe6du2qDz74QC+88ILee+89VapUSZ07d9aePXsKbefrr7/W7Nmz9fzzz+vtt9/W4cOHNXDgQEkXThOtXr1akvTcc8/p888/1+eff66IiIiL1rVu3TqtW7dOMTExmjNnjj799FM99thjruW5ubnq3Lmz/v3vf2vGjBlat26dGjRooHvuuUf79u0r09oA+IgBgP+vdevWpkGDBiY/P7/Isvfff99IMhs2bHDNy83NNbVr1za9evVyzevQoYNxOBwmKSnJNS82NtZIMseOHTPGGBMfH28kmffee6/QexQ3v06dOua6664z2dnZrnlTpkwxAQEBxul0GmOMWbBggalQoYI5cOBAoe21aNHC9OnTxyu1AShfGIEBIEnKzMzUzp079dBDD8nf37/I8s8++0yhoaG6++67XfMCAgLUq1cvbdu2rdC6t99+u6pVq+aabtCggSTp+PHjbtXWoUMH2e32QtvLy8tTUlKSJGnjxo269dZbdcMNNyg/P9/11blzZ3355ZdlWhsA3+AiXgCSpNTUVBUUFCgyMvKiy8PDw4vMr169us6cOVNoXlhYWKHpwMBASVJ2drZbtV1ueykpKfrqq68UEBBQ5LW/D2Perg2AbxBgAEi68Ifdz89PJ0+eLHZ5lSpVXCMev3Xq1ClVqVKlrMu7pCpVqqhhw4aaP3++T+sAcOVwCgmAJMnhcKhVq1ZauHChnE5nkeVt27ZVenp6oTt78vPztWbNGrVt27ZU7+XtUY+77rpLP//8syIjI9W0adMiX76sDUDZYAQGgMvzzz+vO++8U3fddZdGjRqlypUra+/evapataoeeughNW/eXAMHDtTzzz+v6tWr67XXXlNiYqImTZpUqvepUaOGwsLCtGzZMtWtW1d2u10NGzZ0u+6//vWvmjt3rjp27Kjx48frhhtuUFpamr766ivl5uZq5syZHtf2a7ABUD4wAgPApW3bttqyZYtsNpsGDRqkXr16ac2aNapTp478/f314Ycf6p577tGECRN03333uUZkmjRpUqr38fPzU2xsrOLj49WpUyc1a9bsoqeuSsJut+uTTz7RvffeqxkzZqhLly4aNWqUdu/eXerRIW/XBqBs2IwxxtdFAAAAlAYjMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHIIMAAAwHL+H+/xPZquYq3aAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"(\n",
" ggplot(df)\n",
" + aes(x='continent', y='life_expectancy')\n",
" + geom_bar(stat='summary', fun_y=np.median)\n",
")"
]
},
{
"cell_type": "markdown",
"id": "a9f1f383",
"metadata": {},
"source": [
"## Aggregate bar chart (count)\n",
"\n",
"Plotting a bar chart of counts is similar to how we did the median, but we use `stat='count'` instead of `stat='summary'`."
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "fc5b0ffa",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 148,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" ggplot(df)\n",
" + aes(x='species', y='num_animals')\n",
" + geom_bar(stat='identity')\n",
" + coord_flip()\n",
")"
]
},
{
"cell_type": "markdown",
"id": "87b445f7",
"metadata": {},
"source": [
"## Sorting your bars\n",
"\n",
"By defualt, `geom_bar` sorts based on alphabetical order. In order to sort your bars in plotnine, you need to use `reorder` when you're using `aes`."
]
},
{
"cell_type": "code",
"execution_count": 152,
"id": "8464e2e0",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcAgwAALAcb7MLKI05c+boiy++kLf3/5U7b948RUREmFgVAAAwiyUCjCT16dNHQ4cONbsMAABQCTCFBAAALMcyIzCrV6/W6tWrFR4erptuukndu3c3uyQAAGASSwSYm266SXfeeacCAwO1c+dOPf300woMDFSHDh3c2qWlpSktLc217Ovrq+jo6Iout9qy2+1ufwOoeHz/oaKY3dcsEWAaNGjg+rpFixa64YYbtH79+mIBJjU1VdOmTXMtJyYmKikpqcLqxGnBwcFmlwBUW6GhoWaXgGrC7L5miQBzNpvNJsMwiq0fNWqUevfu7Vr29fVVZmZmRZZWrdntdgUHBysrK0tOp9PscoBqiZ95qCjl2ddKE44sEWDWrVun+Ph4+fn5affu3froo480cuTIYu2ioqIUFRXlWs7IyOAXqQmcTifvO2ASvvdQUczua5YIMB9++KHmzZunwsJChYeHa/DgwerSpYvZZQEAAJNYIsAkJyebXQIAAKhEeA4MAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHAIMAACwHG+zCyhPDodDvr6+ZpdRbdhsNklSYGCgDMMwuRqgegoKCjK7BFQTZve1Kh1g8vLylJeXZ3YZ1YbdbpfD4VBOTo6cTqfZ5QDVUnZ2ttkloJooz75WmsEHppAAAIDlEGAAAIDlEGAAAIDlEGAAAIDlEGAAAIDlVOm7kMrT6NGjzS4BFjJ37lyzSwCAKoURGAAAYDkE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5PofamBgoEJCQnTbbbfp6NGjbq8/duyY7rzzToWHh8vf318dOnTQF1984dbmmmuu0Y033qhFixbp8ssvl6+vr7Zt2yZJevnllxUXF6eAgAB169ZNP//8c4l1Lly4UC1atJCfn5/q1KmjiRMnug2tF03BbNiwQd27d1dgYKAeeeQRSdLixYt16aWX6qqrrnLbZ3Jysi677DL5+fkpIiJC1113nfbt2yfp/6YYFi1apLvuukshISEKCwvTuHHjVFBQ4Lafw4cPa/Dgwa73oEuXLtq8eXOxc1i8eLGuuuoq+fn5KTw8XL169dKBAwfc6j9zCik3N1eJiYmKjY2Vr6+vGjdurCVLlrjtc+fOnerVq5dq1aqlgIAAXX755frf//3fEt/D84mLi9MDDzygefPmKTY2ViEhIerbt6/blNu5prmuvPJKDRs2zLVc1Kf+85//qEWLFvL391dCQoL279+vY8eOaeDAgQoODlaDBg309ttvX1CdEyZMUPPmzVWjRg3VqVNHt956q9LS0tzaFPW3d999V5dffrlq1Kihrl276pdffnG1KWkKqeg9mDNnjurVq6egoCANGzZMubm52rp1qzp27KjAwEC1bdtW27dvdzvmrFmz1KZNG4WEhCgyMlI33nij9uzZc95zOX78uO6++27VqVNHfn5+qlevngYNGuTWZsCAAdq6davr+wUoK/xXCVXCr7/+qtGjR2vSpEmKiYlRTEyMNmzYoGuuuUa9evXS22+/rZycHE2aNEl9+vTRhg0bJJ0eSenZs6f27t2rp59+WrVr19bcuXPVvXt3ffXVV2rVqpXrGN9++63279+vJ554QqGhoapXr54+/PBDjRw5UsOGDdOgQYO0efNmDRgwoFh9zz77rB599FGNHTtWs2bN0q5du1wBJjk52a3tbbfdppEjRyoxMVEBAQGSpP/85z/q0KGDW7vFixdr8uTJeuKJJ9S+fXv9+eef+vLLL5WVleXWLjExUT169NA777yjLVu26PHHH5fD4XAdNzMzU506dVKNGjWUkpKikJAQpaSkqGvXrvrpp58UGRkpSZo5c6YeffRR3XXXXUpKSlJ+fr7Wrl2r9PR0xcbGlvjvMnDgQK1bt05TpkxR48aN9fHHH2vw4MEKDQ1Vz549JUk33XSTateurVdffVUhISH6+eefdfjw4VL/25/pgw8+0E8//aR58+YpIyNDY8eO1T//+U8tXbr0gvf122+/6aGHHtLEiRPl4+Oj0aNH6/bbb1dAQIC6dOmiu+++Wy+//LIGDx6sdu3anfM9ONvRo0eVmJio6Ohopaena9asWUpISNAPP/zgNnq1detWzZw5U8nJyXI6nRo3bpwGDx7s6rvn8v7776tZs2ZKTU3V3r17NW7cODkcDm3YsEHjxo1T7dq1NX78eA0YMEA//PCDvLxO/z/28OHDeuCBBxQbG6usrCzNnz9fHTp00J49e845yjNu3DitWrVKycnJiouLU1pamlatWuXWpnHjxgoNDdUnn3yili1bluo9AkrFACxu6NChhiRj48aNbuu7dOlidOjQwSgsLHSt27lzp2Gz2YyPPvrIMAzDeP/99w1Jxr///W9Xm7y8PCMmJsbo16+fa11CQoLh4+NjHDx40O0YV199tdG5c2e3dZMnTzYkGQsWLDAMwzCysrKMGjVqGI899phbuxdffNHw9/c3MjIyDMMwjAULFhiSjOTkZLd2hYWFhq+vrzFz5ky39ffff78RHx9/zvdl3759hqQS6wsICDCOHTtmGIZhPP7440ZISIjx+++/u9qcOnXKiImJMR555BHDMAzj+PHjRkBAgDFy5MhzHq+o/vT0dMMwDGPt2rWGJGP16tVu7W655RajTZs2hmEYRnp6uiHJ+OCDD86539KKjY016tata5w6dcq1bsqUKYaPj4/hdDpLrLFIy5YtjaFDh7qWhw4dathsNmPHjh2udSkpKYYkY/z48a51mZmZht1uN+bMmeNRzQUFBcbhw4eLvU8JCQlGYGCgcfToUde6otoPHTpkGMb//fsuW7as2HuQm5vrWvePf/zDkGSsWrXKtW7lypWGJGPr1q3nrOvEiRNGjRo1jNTUVNf6oUOHGk2bNnUtN23a1Bg3btzfnmdCQoLRv3//v20HXAimkFAl1KpVS1dffbVr+cSJE1q/fr0GDBggp9OpgoICFRQUqFGjRqpXr542bdokSfryyy8VHBzs9kmyPj4+6tevn9atW+d2jBYtWqhevXquZafTqc2bN+vmm292a9e/f3+35a+++kp//fWXBgwY4KqjoKBA1113nU6ePKkdO3a4tb/hhhvcljMzM5Wbm1vs4t34+Hh99913GjdunNatW3fOa3JKqu/EiROuKYQ1a9bo2muvVVhYmKs2u92uhIQE1/u0YcMGnThxQnfddVeJxyjJmjVrFBYWpq5du7qdd/fu3fXdd9/J6XSqVq1aio2N1WOPPaZFixZ5PPJSJCEhQb6+vq7lJk2aKD8/v9i0YWlER0eradOmruVGjRpJkq677jrXupo1ayoyMlKHDh0q9X5XrVqlDh06KCQkRN7e3qpbt64kFZuuufLKK93+zZs0aSJJf/seJSQkyOFwuNXt5eXldrFv0bmcWffGjRvVvXt31apVS97e3goICNBff/113mmk+Ph4LVy4UM8880yxfnym8PDwYtNkwMUiwKBKqF27tttyZmamnE6nxo4dKx8fH7c/Bw8edP3gzszMdE2RnL2/Y8eOnfcY6enpKigoKPb6s9sVXW8RHx/vVkfDhg0lqdgvv7Nff+rUKUly+8Usnb5OY/bs2Vq9erU6d+6siIgIjRkzxnXhb5Fz1Vf0CyUjI0P/+te/ir1Pr7/+uqu2P/74Q9LpX+qllZGRoWPHjhXb74gRI1RQUKC0tDTZbDatWbNGjRs31v3336969eqpdevWxa5BKq2z74Aq+kVe9B6Wxb5KWl/a/W/atEm9e/dWdHS0Xn/9dW3YsEEbN24ssUZPz6Wk1/n7+7uFmrP3dfDgQfXo0UNOp1Opqalav369Nm3apMjIyPMeLyUlRXfccYdmzZql5s2bKyYmRi+++GKxdr6+vsX6JXCxuAYGVYLNZnNbrlmzpmw2mxITE9W3b99i7cPDwyVJYWFhJf7v/Pfffy8273/2MSIiIuTt7V3s9b///rvbctF+li9f7jaCU6R+/frnPU7R648fP+623svLS2PGjNGYMWN05MgRLV26VBMmTFB4eLgmT57saneu+qKiolz7v/766zV9+vRitRWFplq1akk6fa1R0YjB3wkLC1NERIQ+/vjjErcXBatGjRpp2bJlys/P11dffaXExETddNNNOnLkiGrUqFGqY5WWn5+fJCkvL89tfWZmZpke51xWrFihkJAQvfPOO65rT4ougjbTv//9b/31119avny5KwAVFBQUC/FnCwkJ0Zw5czRnzhxt375dzz33nO677z41a9ZMnTt3drU7fvy4qw8BZYURGFRJgYGBat++vXbt2qXWrVsX+xMXFydJ6tSpk7KysrRmzRrXawsKCrRixQp16tTpvMew2+2Kj4/XihUr3Naf/WCx9u3bKyAgQIcPHy6xlr/7we7n56eYmBjX3UUlqVOnjh566CG1aNFCu3btcttWUn0BAQFq3ry5pNNTIj/88IMaN25crLaiNkXnsGDBgvPWeqbrrrtO6enpcjgcJZ73mSMC0umpu4SEBE2YMEFZWVn69ddfS32s0ioKX2e+R7t27bqgKaCLcfLkSfn4+LiF1DfffLNCjn0+J0+elM1mk4+Pj2vdO++8U+xutfNp3ry5Zs+eLUnF+uD+/ft1+eWXl02xwP/HCAyqrJkzZ6pr16665ZZbNGjQIIWGhurw4cP65JNPNHz4cF1zzTW64YYb1LZtWw0ePFjJycmqXbu2UlJSlJaWpsTExL89xsSJE9WnTx8NHz7cdRfS66+/7tamZs2aeuKJJ/Too4/q8OHDuuaaa2S327V37169//77eu+991x3G51Lx44di93WPGrUKIWGhqpdu3YKDQ3V+vXrtW3bNt13331u7X755RdXfVu2bNGMGTM0duxYhYaGSjp9J8mbb76phIQEjRkzRjExMUpPT9fXX3+t6OhojR07ViEhIZoyZYrGjx+vwsJC9enTR4WFhfr000916623qnXr1sVq7t69u2666SZdf/31evTRR9WiRQvl5ORo586d+vnnn/XKK6/o+++/10MPPaRbbrlFDRo00J9//qkZM2YoLi5ODRo0kCR99tlnuvbaa7VgwQK3W509cfXVV6tevXoaO3asZsyYoaysLCUnJ1fY6ED37t01Z84c/fOf/9TNN9+sDRs2FOsvZii6Pmb48OEaNWqUdu7cqVmzZv3tQwk7duyom2++Wc2aNZPdbtfixYvlcDjcRl9ycnK0e/duTZkypTxPAdUQAQZVVocOHVy38A4fPlx5eXmqW7euunXrpssuu0zS6VGUjz/+WA8//LAeeeQR5eTkKD4+XmvWrHG7hfpcevfurfnz5yspKUlLly7V1VdfrbffftvtgmJJeuihh1SnTh09++yzSklJkY+Pjxo0aKAbb7yx2EhESfr376/bb79d2dnZCgoKcp3fyy+/rJdfflknTpzQpZdeqtmzZxe70DYpKUmfffaZBgwYILvdrvvvv19JSUmu7bVq1dLGjRs1adIkjR8/Xn/88YciIyPVrl07twuAH330UUVERGj27NlauHChgoKC1L59+xKvISry7rvvKjk5WS+88IIOHDigkJAQNWvWTMOHD5ckXXLJJbrkkks0Y8YMHTlyRCEhIercubPeeOMN2e12Sad/ARa1vVg+Pj5asWKF7r33Xg0YMECXXXaZZs+erYceeuii910avXr10tNPP62UlBQtWLBAHTt21Icffui6qNYszZs318KFCzV16lTdeOONuvLKK/Xuu++W+EiAM3Xs2FGLFy/Wvn375OXlpebNm2vlypVq3Lixq83q1avl7+/vum0eKCs2wzAMs4sAcH75+fmKiYnR008/rSFDhpTqNfv371f9+vW1bNmyYndGWcnkyZO1YsUKbd++vdj1Qaj8BgwYoKCgIL322mtml4IqhmtgAAvw8fHRhAkT9Nxzz5ldSoVbv369EhMTCS8WtG/fPn300UeaOHGi2aWgCmIKCbCIe+65R1lZWcrIyHDdRVUdrF271uwSSsUwjPN+6rKXl5frzqPq4siRI3rppZdc1zMBZYkpJAAoA0UXG5/L0KFDtXDhwoorCKjiCDAAUAays7P1448/nnN7eHi46/Z9ABePAAMAACynek3IAgCAKoEAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALIcAAwAALOf/ARze27/5kJgQAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 152,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" ggplot(df)\n",
" + aes(x='reorder(species, num_animals)', y='num_animals')\n",
" + geom_bar(stat='identity')\n",
")"
]
},
{
"cell_type": "markdown",
"id": "36a4f35e",
"metadata": {},
"source": [
"`x='reorder(species, num_animals)'` means \"I want you to use `species` for the x axis, but I really want you to order it based on the `num_animals` column.\""
]
},
{
"cell_type": "markdown",
"id": "85b989f1",
"metadata": {},
"source": [
"### Reversing your bar order\n",
"\n",
"Instead of sorting with `num_animals`, you're going to sort with `-num_animals`, which I guess it's the ... subtracted negative version?"
]
},
{
"cell_type": "code",
"execution_count": 155,
"id": "0611dcb3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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H35QeHi4WrdurfXr1+vll1/21luBIf7880+9+uqr+uGHH5STk6P69etr7Nixmj59unbu3KkzZ84oNjZWDz74oGJjY7Vu3Tp99tlnstlsWrt2rWrWrKlp06Z5+23AywYOHKhOnTpp06ZNOnDggB5++GGtXLlSqampCg4O1u23364uXbq4vWblypVatWqVypYtqzvuuENdu3Z1LcvOztZzzz2nr7/+WmFhYXrooYdUv359SVJCQoJatGihunXrav78+XI4HOrZs6ckaenSpSpXrlzxvfErAAUGF5WTk6PExER16NBB3bt3144dO5SYmKjmzZvrt99+09SpUzVq1CjFx8frs88+06RJk7RgwQIFBwdr4cKFkqRFixbpxIkTmjJlipffDUzgcDj01FNPKS4uTgsWLJCvr6927dolSbrhhhs0ZMgQ+fj4aOnSpZoxY4bmzp2rzp07a/fu3apYsaL69u3r5XeAkuSTTz7RuHHjFBYWpm3btmns2LGKjIzU//3f/2nChAmKi4tTnTp1JEnp6en6448/9Morr+jAgQN68sknFRMTo+uuu06S9PXXX2vYsGEaPny4Pv30UyUmJuqll15S+fLlXfuLjY3Vww8/rPXr12vGjBleec9XAi4h4aJ27dqlM2fOqEePHipbtqxuuOEGxcfHS5K++OILxcfH68Ybb5TdblebNm1UtWpVffnll3I4HNq8ebPuuece+fv7q0qVKurUqZOX3w1M8Msvv+iPP/7QwIEDFRAQoLJly7p+y23Xrp0CAgLk4+OjXr166cCBA0pPT/dyYpRkXbp0UZUqVVS2bFnddNNNioqKks1m0zXXXKP4+Hjt3LnTta5lWerTp498fX1Vu3ZttWnTRp9//rlreY0aNXTLLbfIbrerbdu2ioiI0NatW73xtq54nIHBRR07dkyhoaEqU+Z/fTc8PFyZmZn6888/FRER4bZ+5cqVdezYMaWnpysnJ0dhYWGuZWf/DJxPamqqwsPD5ePj4zbf4XDo9ddf1+bNm3XixAnXmExPT1dwcLA3osIAZ/8btW3bNr3xxhv67bffZFmWzpw5o6pVq7qWBwQEKDAw0DUdHh6u7777zm363G0fO3asCNPjfDgDg4sKDQ3VsWPH5HQ6XfOOHj0qSapUqZKOHDnitv4ff/yh0NBQBQcHq2zZskpNTXUtO/tn4HzCwsJ09OhR5eTkuM3//PPPtWXLFk2ePFnLly/Pcy+VzWYrzpgwTHZ2tqZOnaquXbtq6dKleuONN9SoUSO3dU6ePKmTJ0+6plNTU93u+cv9t+/s6dDQ0KINjnxRYHBRV199tXx9fbVy5Url5OTo+++/17fffitJat68ub799ltt27ZNDodDn3zyiQ4fPqwmTZrIbreradOmWrZsmU6dOqUjR45o/fr1Xn43MEGdOnUUHh6uV155RSdPnlROTo527typU6dOycfHR0FBQcrKytLrr7/u9roKFSro999/91JqlHTZ2dnKyclRSEiI7Ha7vvvuO7ezK9LfJXjp0qXKzs7Wnj17tHHjRrVs2dK1PDk5WZ999pnr37vff/89TwmS/h6Lx44dU3Z2dpG/rysVl5BwUWXLltXYsWM1d+5cvfXWW6pfv75uueUWZWdnq2rVqho1apQWL16so0ePKioqSuPHj3edzh88eLDmzJmj/v37Kzw8XC1bttSnn37q3TeEEs9ut2v8+PF6+eWXNWjQIDmdTl177bUaPny4vv32W/Xv319BQUG655573F7Xvn17PfPMM7r77rtVs2ZNJSYmeukdoCQKCAjQAw88oBkzZignJ0c33nijGjdu7LZOcHCwIiIidP/998tut6tnz56uG3glqXHjxvrmm280f/58hYWFacyYMQoKCsqzrwYNGqhGjRrq27evLMvSokWL+BRSIeO7kFCs3nvvPX3zzTd8GgkAcFm4hIQidejQIe3Zs0eWZWnfvn1avXq1mjZt6u1YAADDcQkJRerMmTOaPn2666FRrVq10j/+8Q9vxwIAGI5LSAAAwDhcQgIAAMahwAAAAONQYAAAgHEoMAAAwDgUGAAAYBwKDAAAMA4FBigkx48fl81m0+LFiwt1uzt27FBQUFCeL5ErKRYvXiybzcYXdXpZv379VL9+/WLb3759+2Sz2fT2228XaH2n06mrrrpK//73v4s4Ga4UFBighBs3bpz69eun8PBwb0fJV5cuXbRlyxZVqFDB21GuaOPHj9eyZcu8HeO8ypQpo9GjR2vChAl5vmUc8AQFBqWGZVk6c+ZMke7D4XAUy7fLnjp1SpK0d+9erV69Wvfff3+R79NT4eHhatKkicqW5cHe3lSrVi01aNDA2zEu6K677tLvv/+uNWvWeDsKSgEKDIyVe8p83bp1uu666+Tn56fVq1dLkrZs2aI2bdooMDBQISEh6t27t44cOeL2+mPHjun+++9XWFiY/P391axZM33++edu67Ru3Vq33nqrlixZoquuukp+fn7avn27JOmll15SbGysAgIC1LZtW/3666/55ly8eLEaNGigcuXKqWrVqho7dqwcDofbcpvNpi1btqh9+/YKDAzU448/LklaunSpatasqRtuuMFtm9OmTVPt2rVVrlw5hYeHq127dkpOTpb0v1P7S5Ys0YABAxQSEqLQ0FA9+uijeX7zPXTokO69917XMWjZsqW2bduW5z0sXbpUN9xwg8qVK6ewsDB17txZ+/fvd8t/9iWkM2fOKCEhQTExMfLz81PdunXznB348ccf1blzZ1WqVEkBAQG66qqr9Oyzz+Z7DC9VbqbvvvtOnTp1UmBgoOrUqaOlS5e6rRcbG6tHHnnEbd67774rm82mffv2Sfrf8Xzttdf04IMPqkKFCoqIiNDMmTMlScuXL9dVV12l4OBgde/eXcePHy9wzi1btqhr166KiopSYGCgrr/+er322mtu63z66aey2Wz66KOP1Lt3bwUFBSkmJibPsTr3ElLuMfjmm2/UoUMH1zH+z3/+I6fTqXHjxqly5cqqXLmyxowZI6fT6Xrtrl271KtXL1WvXl0BAQGqV6+ennvuObd18vP++++rUaNGKl++vCpUqKBGjRpp3bp1ruUBAQHq0qWLlixZUuBjBJwPBQZG++233zR06FCNGDFCH3zwga6//npt2bJFrVu3VkhIiN58800tXLhQW7duVbdu3Vyvczgc6tSpk1avXq1nnnlGK1asUPny5dW+ffs8/4F/8803mj59uiZPnqx169apevXqWrNmjQYNGqRbbrlFq1atUtu2bXXnnXfmyTdz5kwNHDhQ//jHP7R69WqNGjVKc+bM0dixY/Os27t3b7Vp00Zr1qzRfffdJ0n6z3/+o2bNmrmtt3TpUo0fP14DBgzQBx98oJdfflnXX3+90tPT3dZLSEiQ0+nUW2+9pccff1xJSUkaN26ca3laWpqaN2+u77//XklJSXrnnXcUGBioNm3auJW96dOnq2/fvmrYsKFWrlypV155RXXq1LngPTk9e/bUggULNHLkSK1Zs0YdO3bUvffeq/Xr17vWue2225SWlqZXXnlFa9eu1WOPPabMzMzzbtMT99xzjzp06KB3331XN9xwg/r166effvrJo22NHTtW/v7+WrFihe68806NHDlSY8aM0fPPP69nn31W8+bN08aNG/XEE08UeJv79+/XzTffrJdfflmrV6/WP//5Tw0YMCDf/+AffPBBxcXFadWqVbrttts0atQoffDBBxfdR58+fXTrrbdq1apVioqKUvfu3TVs2DAdPHhQS5cu1ZAhQzRt2jQtX77c9ZrDhw/rqquu0vz587Vu3ToNGjRIkydPvuC3yO/Zs0c9evTQNddco1WrVunNN99Uz549lZaW5rZes2bNtHHjxouWIeCiLMBQffv2tSRZX375pdv8li1bWs2aNbOcTqdr3o8//mjZbDZr7dq1lmVZ1nvvvWdJsj744APXOllZWVZ0dLTVvXt317xWrVpZPj4+1oEDB9z2cdNNN1ktWrRwmzd+/HhLkrVo0SLLsiwrPT3dKl++vDVmzBi39V544QXL39/fSk1NtSzLshYtWmRJsqZNm+a2ntPptPz8/Kzp06e7zR8yZIgVHx9/3uOSnJxsSco3X0BAgHXs2DHLsizrySeftEJCQqw//vjDtc7p06et6Oho6/HHH7csy7KOHz9uBQQEWIMGDTrv/nLzHz161LIsy9q4caMlyfrwww/d1rvrrrusG2+80bIsyzp69KglyXr//ffPu93LkZtp3rx5rnl//fWXFRAQYE2ZMsU1LyYmxhoyZIjba1etWmVJspKTky3L+t/x7Nmzp2udnJwcq3LlylZgYKDr79GyLGvkyJFWhQoVPMrsdDqt7Oxsa9CgQVbTpk1d8z/55BNLkuvvJHfd2NhYa8CAAa55ffv2ta655po8x2D+/PmueTt27LAkWU2aNHHbd8OGDa3bb7/9grkSExOtyMhI1/zc47JixQrLsixrxYoVliQrPT39gu8z9/3s3LnzgusBF8MZGBitUqVKuummm1zTJ0+e1ObNm3XnnXfK4XAoJydHOTk5iouLU/Xq1bV161ZJ0hdffKHg4GC3b8b28fFR9+7dtWnTJrd9NGjQQNWrV3dNOxwObdu2TXfccYfbej169HCb/u9//6u//vpLd955pytHTk6O2rVrp1OnTmnnzp1u63fp0sVtOi0tTWfOnMlz8258fLy+++47Pfroo9q0adN578nJL9/Jkye1Y8cOSdKGDRt0yy23KDQ01JXNbrerVatWruO0ZcsWnTx5UgMGDMh3H/nZsGGD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\n",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" ggplot(df)\n",
" + aes(x='reorder(species, -num_animals)', y='num_animals')\n",
" + geom_bar(stat='identity')\n",
")"
]
},
{
"cell_type": "markdown",
"id": "312165a3",
"metadata": {},
"source": [
"## Stacked bar graph\n",
"\n",
"To make a stacked bar graph, you use one of your columns to specify `fill`, which is the color of the bar. All of the filled bars get stacked next to each other."
]
},
{
"cell_type": "code",
"execution_count": 173,
"id": "9bf4b9c5",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"