{ "cells": [ { "cell_type": "markdown", "id": "eb5be356-b9a7-4cc2-bcd8-91aba02939a6", "metadata": { "tags": [] }, "source": [ "Gráficas de bala --- 4:35 min\n", "===\n", "\n", "* 4:35 min | Última modificación: Octubre 6, 2021 | [YouTube](https://youtu.be/SBSJiLtBa8g)" ] }, { "cell_type": "markdown", "id": "2e9d253c-c2e2-449a-a8e2-c165b8bfe880", "metadata": {}, "source": [ "El gráfico de bala es usado para contrastar varias cantidades contra una meta. Por ejemplo, las ventas del año anterior, las ventas actuales y la meta actual. En esta lección se desarrolla una gráfica de bala usando matplotlib." ] }, { "cell_type": "code", "execution_count": 1, "id": "dedcb443-43d8-420a-bea7-181bf08d1b8f", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "labels = list('ABCDEF')\n", "\n", "x_previous = [110, 130, 280, 350, 275, 115] \n", "x_current = [80, 200, 350, 420, 280, 130]\n", "x_goal = [120, 140, 300, 380, 300, 140]\n", "plt.figure(figsize=(7, 4))\n", "\n", "#\n", "# Barras de valores anteriores\n", "#\n", "plt.barh(\n", " y=labels,\n", " width=x_previous,\n", " height=0.8,\n", " color=\"lightgray\",\n", " alpha=0.8,\n", ")\n", "\n", "\n", "#\n", "# Barras para los valores actuales\n", "#\n", "colors_current = [\n", " \"tab:green\" if current >= goal else \"tab:orange\"\n", " for current, goal in zip(x_current, x_goal)\n", "]\n", "\n", "plt.barh(\n", " y=labels,\n", " width=x_current,\n", " height=0.4,\n", " color=colors_current,\n", " alpha=1.0,\n", " edgecolor=colors_current,\n", " linewidth=3,\n", ")\n", "\n", "#\n", "# Metas\n", "#\n", "for i_goal, goal in enumerate(x_goal):\n", " plt.plot(\n", " [goal, goal],\n", " [i_goal - 0.5, i_goal + 0.5],\n", " c=\"black\",\n", " linewidth=2,\n", " )\n", "\n", "#\n", "# Personalización\n", "#\n", "plt.gca().spines[\"left\"].set_color(\"gray\")\n", "plt.gca().spines[\"bottom\"].set_color(\"gray\")\n", "plt.gca().spines[\"top\"].set_visible(False)\n", "plt.gca().spines[\"right\"].set_visible(False)\n", "\n", "plt.show()" ] } ], "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.6.9" } }, "nbformat": 4, "nbformat_minor": 5 }