diff --git a/src/notebooks/541-waffle-chart-with-additionnal-grouping.ipynb b/src/notebooks/541-waffle-chart-with-additionnal-grouping.ipynb new file mode 100644 index 0000000000..3a5c1d7985 --- /dev/null +++ b/src/notebooks/541-waffle-chart-with-additionnal-grouping.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Libraries\n", + "\n", + "This post relies on the [PyWaffle library](https://github.com/gyli/PyWaffle), that is definitely the best way to create a waffle chart with Python.\n", + "\n", + "The very first thing to do is to install the library:\n", + "\n", + "`pip install pywaffle`\n", + "\n", + "Then, we just have to import the following libraries:\n", + "- `pandas` for creating a dataframe with our data\n", + "- `matplotlib` for customizing the chart\n", + "- `pywaffle` for the **waffle** type figure" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from pywaffle import Waffle\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset\n", + "\n", + "We create a simple dataset with the **number of cars**, broken down **by factory and car type** (`car`, `truck` or `motorcycle`). Also, we define the index of this dataset using the `set_index()` function and specify that it is the `label` variable." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "data = {'labels': ['Car', 'Truck', 'Motorcycle'],\n", + " 'Factory A': [32384, 13354, 5245],\n", + " 'Factory B': [22147, 6678, 2156],\n", + " 'Factory C': [8932, 3879, 896],\n", + " }\n", + "df = pd.DataFrame(data).set_index('labels')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple waffle chart\n", + "\n", + "First, let's create a **simple waffle chart** to see what it looks like. We have to define the properties of our chart and then pass it to the `figure()` function from [matplotlib](https://python-graph-gallery.com/matplotlib/)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot = {'values': [value/1000 for value in data['Factory A']], # Convert actual number to a reasonable block number\n", + " 'labels': [f\"{index} ({value})\" for index, value in zip(df['Factory A'],df.index)],\n", + " 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8},\n", + " 'title': {'label': 'Vehicle Production of Factory A', 'loc': 'left', 'fontsize': 12}\n", + " }\n", + "\n", + "fig = plt.figure(\n", + " FigureClass=Waffle,\n", + " plots={311: plot},\n", + " rows=5, # Outside parameter\n", + " cmap_name=\"Accent\", # Change color with cmap\n", + " rounding_rule='ceil', # Change rounding rule, so value less than 1000 will still have at least 1 block\n", + " figsize=(8, 6)\n", + ")\n", + "\n", + "# Display the chart\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Waffle chart with grouping\n", + "\n", + "This example can be found in the [original documentation of PyWaffle](https://github.com/gyli/PyWaffle) (this one here is slighly different). \n", + "\n", + "The very first thing to do is to create our `plot dictionnaries`. In our case, since we want 3 different charts, we create 3 plot dictionnaries with the **values and properties** we want them to have. We divide the values by 1000 only because we want to **reduce the size** of them but it's optionnal. \n", + "\n", + "Then, we just have to add these dictionnaries into the `plot` argument of the `figure()` function from matplotlib. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot1 = {'values': [value/1000 for value in data['Factory A']], # Convert actual number to a reasonable block number\n", + " 'labels': [f\"{index} ({value})\" for index, value in zip(df['Factory A'],df.index)],\n", + " 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 8},\n", + " 'title': {'label': 'Vehicle Production of Factory A', 'loc': 'left', 'fontsize': 12}\n", + " }\n", + "\n", + "plot2 = {'values': [value/1000 for value in data['Factory B']],\n", + " 'labels': [f\"{index} ({value})\" for index, value in zip(df['Factory B'],df.index)],\n", + " 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.2, 1), 'fontsize': 8},\n", + " 'title': {'label': 'Vehicle Production of Factory B', 'loc': 'left', 'fontsize': 12}\n", + " }\n", + "\n", + "plot3 = {'values': [value/1000 for value in data['Factory C']],\n", + " 'labels': [f\"{index} ({value})\" for index, value in zip(df['Factory C'],df.index)],\n", + " 'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.3, 1), 'fontsize': 8},\n", + " 'title': {'label': 'Vehicle Production of Factory C', 'loc': 'left', 'fontsize': 12}\n", + " }\n", + "\n", + "fig = plt.figure(\n", + " FigureClass=Waffle,\n", + " plots={\n", + " 311: plot1,\n", + " 312: plot2,\n", + " 313: plot3,\n", + " },\n", + " rows=5, # Outside parameter applied to all subplots, same as below\n", + " cmap_name=\"Accent\", # Change color with cmap\n", + " rounding_rule='ceil', # Change rounding rule, so value less than 1000 will still have at least 1 block\n", + " figsize=(8, 6)\n", + ")\n", + "\n", + "# Add a title and a small detail at the bottom\n", + "fig.suptitle('Vehicle Production by Vehicle Type', fontsize=14, fontweight='bold')\n", + "fig.supxlabel('1 block = 1000 vehicles',\n", + " fontsize=8,\n", + " x=0.14, # position at the 14% axis\n", + " )\n", + "fig.set_facecolor('#EEEDE7')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Going further\n", + "\n", + "This post explains how to create a [waffle chart](https://python-graph-gallery.com/waffle-chart/) with grouping.\n", + "\n", + "For more examples of **how to create or customize** your waffle chart, see the [waffle section](https://python-graph-gallery.com/waffle-chart/). You may also be interested in how to [change the icons](https://python-graph-gallery.com/503-waffle-chart-introduction/)." + ] + } + ], + "metadata": { + "chartType": "waffle", + "description": "A waffle chart is a graphical representation of data points in a dataset, where individual data points are represented by small squares on a two-dimensional grid. This type of plot allows us to visualize the distribution of categorical data by showing the proportion or count of each category within the grid.
Matplotlib and Pywaffle allows us to create waffle charts easily. You can check this introduction to waffle charts. In this post, we will explore how to leverage Matplotlib to customize waffle charts with a grouping variable.", + "family": "partOfAWhole", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "keywords": "waffle, grouping, matplotlib, chart, plot", + "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.9.13" + }, + "seoDescription": "How to create a waffle chart with additional grouping", + "slug": "541-waffle-chart-with-additionnal-grouping", + "title": "Waffle chart with additionnal grouping" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/notebooks/547-stacked-barplots-with-pandas.ipynb b/src/notebooks/547-stacked-barplots-with-pandas.ipynb new file mode 100644 index 0000000000..8121ff4ffd --- /dev/null +++ b/src/notebooks/547-stacked-barplots-with-pandas.ipynb @@ -0,0 +1,199 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Libraries\n", + "\n", + "[Pandas](https://python-graph-gallery.com/pandas/) is a popular open-source Python library used for data manipulation and analysis. It provides data structures and functions that make working with structured data, such as tabular data (like `Excel` spreadsheets or `SQL` tables), easy and intuitive.\n", + "\n", + "To install [Pandas](https://python-graph-gallery.com/pandas/), you can use the **following command** in your command-line interface (such as `Terminal` or `Command Prompt`):\n", + "\n", + "`pip install pandas`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Matplotlib](https://python-graph-gallery.com/matplotlib/) functionalities have been **integrated into the pandas** library, facilitating their use with `dataframes` and `series`. For this reason, you might also need to **import the [matplotlib](https://python-graph-gallery.com/matplotlib/) library** when building charts with [Pandas](https://python-graph-gallery.com/pandas/).\n", + "\n", + "This also means that they use the **same functions**, and if you already know [Matplotlib](https://python-graph-gallery.com/matplotlib/), you'll have no trouble learning plots with [Pandas](https://python-graph-gallery.com/pandas/)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dataset\n", + "\n", + "In order to create graphics with [Pandas](https://python-graph-gallery.com/pandas/), we need to use **pandas objects**: `Dataframes` and `Series`. A dataframe can be seen as an `Excel` table, and a series as a `column` in that table. This means that we must **systematically** convert our data into a format used by pandas.\n", + "\n", + "We generate 3 variables: 2 quantitative using `np.random.uniform()` and `np.random.normal()` functions and one qualitative, whose values **depend** on the values of the first qualitative variable. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "data = {\n", + " \"Product\": [\"Product A\", \"Product A\", \"Product A\", \"Product B\", \"Product B\", \"Product B\"],\n", + " \"Segment\": [\"Segment 1\", \"Segment 2\", \"Segment 3\", \"Segment 1\", \"Segment 2\", \"Segment 3\"],\n", + " \"Amount_sold\": [100, 120, 120, 80, 160, 150]\n", + "}\n", + "\n", + "df = pd.DataFrame(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple stacked barplot\n", + "\n", + "Once we've opened our dataset, we'll now **create the graph**. \n", + "\n", + "This dataset represents sales data for different products (`Product A` and `Product B`) across various segments (`Segment 1`, `Segment 2`, and `Segment `3). The `\"Amount_sold\"` column represents the **quantity of each product sold** within each segment.\n", + "\n", + "The `pivot()` function is used in this context to **reshape the original DataFrame** into a format suitable for creating a grouped [barplot](https://python-graph-gallery.com/barplot/). In a grouped [barplot](https://python-graph-gallery.com/barplot/), you typically want each category (in this case, each `product`) to have its own set of bars grouped by another categorical variable (in this case, the `segments`).\n", + "\n", + "Then, we put `stacked=True` in order to specify that we want the bars on top of each others" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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rmJjYxUZGamxY8dqxowZuuOOO7zLR40apYEDB2revHmKi4tTdHS0Zs+erfLycv3bv/2bYmJi1KRJEy1btsxnvd99952GDRumBg0aqGHDhhowYIAOHz5cab3/8R//oYSEBDVs2FCPPfaYXC6XJKlXr17KycnRv/7rv8pms8lms12fXySAGiOgALikiIgIRUREaO3atXI6nZWWezwe3X///crLy9OGDRuUlZWljh07qnfv3t49LH//+9/17LPP6o9//KOysrLUtGlTLVmypNK63n//fR0/flzbtm3T888/r/T0dPXv318NGjTQJ598ovHjx2v8+PHeJ8mePXtWKSkpioiI0LZt27R9+3ZFRESoX79+Kisr8673gw8+0DfffKMPPvhAK1as0PLly7V8+XJJ0po1a9SkSRPNmTNHubm5ys3NvQ6/RQBXxQMA1fiv//ovT4MGDTyhoaGe7t27e2bOnOn57LPPPB6Px/Pee+95oqKiPKWlpT6vufXWWz1//etfPR6Px9O1a1fPY4895rP8rrvu8nTo0ME7PXLkSE9SUpKnoqLCO69Vq1aeu+++2ztdXl7uCQ8P97z22msej8fjWbp0qadVq1Yet9vtHeN0Oj1hYWGejRs3+qy3vLzcO+YXv/iFZ9iwYd7ppKQkz4IFC67mVwPgOmIPCoBqDRkyRMePH9c777yjvn37asuWLerYsaOWL1+urKwsFRcXq2HDht69LREREcrOztY333wjSTp48KB++tOf+qzz4mlJatu2rQIC/u+fpLi4OLVv3947HRgYqIYNGyo/P1+SlJWVpa+//lqRkZHe942JiVFpaan3vc+v98LnqSQkJHjXAcBcnCQL4LJCQ0PVp08f9enTR88884zGjh2rWbNmacKECUpISNCWLVsqvSY6Otr754vP7fBU8Qiw4OBgn2mbzVblPLfbLUlyu93q1KmT/v73v1daV+PGjatd7/l1ADAXAQVAjbVp00Zr165Vx44dlZeXp6CgIDVr1qzKsa1atdLOnTv1m9/8xjvv008/veYaOnbsqFWrVnlPzr1aISEhqqiouOZ6ANQuDvEAuKSTJ0/qnnvu0auvvqq9e/cqOztbb7zxhp577jkNGDBAqamp6tatmwYOHKiNGzfq8OHD2rFjh37/+997Q8ikSZO0dOlSrVixQocOHdLcuXO1d+/ea75iZsSIEWrUqJEGDBigDz/8UNnZ2dq6dasmT56sY8eOXfF6mjVrpm3btum7777TDz/8cE01Aag97EEBcEkRERHq2rWrFixYoG+++UYul0sOh0MPP/ywnnzySdlsNm3YsEFPPfWURo8erRMnTig+Pl49evRQXFycpHNB4ttvv9W0adNUWlqqoUOHatSoUdq5c+c11VavXj1t27ZNTzzxhAYPHqyioiLdcsst6t27d432qMyZM0fjxo3TrbfeKqfTWeXhJwA3ns3D30YAN1ifPn0UHx+vjIwMq0sBYCj2oAC4rs6ePasXX3xRffv2VWBgoF577TVt3rxZmZmZVpcGwGDsQQFwXZWUlOiBBx7Q7t275XQ61apVK/3+97/X4MGDrS4NgMEIKAAAwDhcxQMAAIxDQAEAAMYhoAAAAOMQUAAAgHEIKAAAwDgEFAAAYBwCCgAAMA4BBQAAGOf/A5/wIYTagTe7AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Pivot the data to have 'Product' as columns and 'Segment' as the index\n", + "pivot_df = df.pivot(index='Segment',\n", + " columns='Product',\n", + " values='Amount_sold')\n", + "\n", + "# Create a grouped barplot\n", + "pivot_df.plot.bar(stacked=True,\n", + " grid=True)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stacked barplot 100%\n", + "\n", + "In order to make the graph **100% stacked**, we have to modify the original dataset so that everything has the **same scale** and the sum faces 100%. We use the `div()` function from [pandas](https://python-graph-gallery.com/pandas/). " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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AABgFAIuAAAAjELABQAAgFEIuAAAADAKARcAAABGIeACAADAKARcAAAAGIWACwAAAKMQcAEAAGAUAi4AAACMQsAFAACAUQi4AAAAMAoBFwAAAEYh4AIAAMAofg+4J0+e1K9+9SulpqYqMjJSnTt31pIlS9TY2Og9xrIsZWVlKTk5WZGRkRo2bJj27dvn71IAAAAQhPwecB966CE9+uijWr16tfbv36/ly5frN7/5jVatWuU9Zvny5VqxYoVWr16tXbt2KSkpSSNHjlRVVZW/ywEAAECQaeHvE7799tsaN26cxowZI0nq1KmTNm7cqHfffVfS17O3OTk5WrhwoSZMmCBJys3NVWJiojZs2KCZM2c2OWddXZ3q6uq825WVlZIkj8cjj8fj70/Bv0Ii7K7gnDz/vz6Pw+uU09/nQOLw9zpgelKiL/0lAN7rgOlLh/ek439nwxguy7Isf57wwQcf1KOPPqq8vDz927/9m/bs2aP09HTl5OToxz/+sT799FNdccUV2r17t6655hrv68aNG6f4+Hjl5uY2OWdWVpYWL17cZHzDhg2KioryZ/kAAKCZVFdXKyMjQxUVFYqLi7O7HBjM7zO49957ryoqKnTllVcqNDRUDQ0NeuCBB/TjH/9YklRaWipJSkxM9HldYmKiSkpKznjOBQsWaO7cud7tyspKpaSkKD093fnfIMva213BOXlCIpTfa6VGvne3whpr7S7n7Bb80+4KzEFP+g996R8O70kpgPrS4T156i+wQHPze8B99tln9Yc//EEbNmxQjx49VFRUpDlz5ig5OVlTp071HudyuXxeZ1lWk7FT3G633G53k/GwsDCFhYX59xPwNyf/IDxNWGOts39oO/19DiROfp9P4/ielOhLf3H6+3wax/elw3vS8b+zYQy/B9xf/vKXmj9/vm6++WZJUq9evVRSUqJly5Zp6tSpSkpKkvT1TG67du28rysrK2syqwsAAABcKL/fRaG6ulohIb6nDQ0N9d4mLDU1VUlJScrPz/fur6+vV0FBgQYNGuTvcgAAABBk/D6D+6Mf/UgPPPCAOnTooB49eujvf/+7VqxYoenTp0v6emnCnDlzlJ2dra5du6pr167Kzs5WVFSUMjIy/F0OAAAAgozfA+6qVat0//33KzMzU2VlZUpOTtbMmTP161//2nvMvHnzVFNTo8zMTJWXl2vA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t29f5efn+4zn5+dr0KBBdpQEAAAAQ9i2RGHu3Ln6yU9+on79+mngwIF6/PHHdfDgQc2aNcuukgAAAGAA2wLupEmTdOzYMS1ZskRHjx5Vz5499eqrr6pjx452lRSU3G63Fi1a1GQJCGAXehJORF8CgcVlca8OAAAAGMTWR/UCAAAA/kbABQAAgFEIuAAAADAKARcAAABGIeACAADAKARcSJLKy8v19NNP210GglBjY+NZxw8ePHiJqwG+fpxscXGxTp48KUmqr6/Xs88+q6efflpffPGFzdUBOB8EXEiSDh48qJ/+9Kd2l4EgUllZqYkTJyo6OlqJiYlatGiRGhoavPs///xzpaam2lghgtGBAweUmpqqLl26qHv37iouLtagQYN066236o477lD37t310Ucf2V0mgG9BwA0SlZWV5/ynqqrK7hIRZO6//37t2bNH69ev1wMPPKDc3FyNGzdO9fX13mO4TTcutXvvvVe9e/dWUVGRxo4dq7Fjx6p9+/YqLy9XeXm5Bg8erCVLlthdJoBvwYMegkRISIhcLtdZ91uWJZfL5TODBjSnjh07Kjc3V8OGDZMkHTt2TGPGjFHLli310ksv6auvvlJycjI9iUsqISFBeXl5uvrqq3XixAnFxsZq27Zt+sEPfiBJevvtt3XzzTerpKTE5koBnIttj+rFpRUbG6uFCxdqwIABZ9z/0UcfaebMmZe4KgSzL774wufR3G3atFF+fr5GjRql66+/Xk888YSN1SFYHT9+XK1bt5YkRUdHKzo6Wu3atfPub9++vf71r3/ZVR6A80TADRJ9+vSRJA0dOvSM++Pj4/lzMC6plJQU7d+/32edbWxsrPLy8pSenq4bbrjBxuoQrJKTk3Xw4EF16NBBkrR8+XIlJCR493/++edq1aqVXeUBOE+swQ0SGRkZioiIOOv+pKQkLVq06BJWhGCXnp6up556qsl4TEyMtmzZcs5+BZpLWlqa/vGPf3i377jjDsXGxnq38/LyvBMGAJyLNbgAbFFeXq4jR46oR48eZ9x//PhxFRYWnvWvDoAdiouLFRER4bNsAYDzEHABAABgFJYoAAAAwCgEXAAAABiFgAsAAACjEHABAABgFAJukAkNDVVZWVmT8WPHjik0NNSGihDs6Ek4EX0JBDYCbpA5200z6urqFB4efomrAehJOBN9CQQ2nmQWJFau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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Pivot the data to have 'Product' as columns and 'Segment' as the index\n", + "pivot_df = df.pivot(index='Segment',\n", + " columns='Product',\n", + " values='Amount_sold')\n", + "\n", + "# New dataframe with values on a 100% scale\n", + "pivot_df_percentage = pivot_df.div(pivot_df.sum(axis=1), axis=0) * 100\n", + "\n", + "# Create a grouped barplot\n", + "pivot_df_percentage.plot.bar(stacked=True,\n", + " grid=True)\n", + "\n", + "# Add a legend\n", + "plt.legend(bbox_to_anchor=(1.04, 1), # shift the legend 4% on the right\n", + " loc='upper left')\n", + "\n", + "# Display the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Going further\n", + "\n", + "This post explains how to create a stacked barplot with [pandas](https://python-graph-gallery.com/pandas/).\n", + "\n", + "For more examples of **how to create or customize** your barplots, see the [barplot section](https://python-graph-gallery.com/barplot/). You may also be interested in how to [customize your barplot with pandas](https://python-graph-gallery.com/539-customizing-barplot-with-pandas/)." + ] + } + ], + "metadata": { + "chartType": "barplot", + "description": "A barplot is a graphical representation of data points in a dataset, where individual data points are represented by rectangular bars on a two-dimensional coordinate system. This type of plot allows us to visualize the distribution of categorical data by showing the frequency or count of each category along the plot.
Pandas, a powerful data manipulation library in Python, allow us to create easily barplots: check this introduction to barplots with pandas. In this post, we will explore how to leverage Pandas to create a stacked barplot.", + "family": "ranking", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "keywords": "barplot, stacked, pandas, matplotlib, chart", + "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.9.13" + }, + "seoDescription": "How to create a stacked barplot with pandas", + "slug": "547-stacked-barplots-with-pandas", + "title": "Stacked Barplot with Pandas" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/src/pages/barplot.js b/src/pages/barplot.js index ee958536df..0f71127bf2 100644 --- a/src/pages/barplot.js +++ b/src/pages/barplot.js @@ -164,6 +164,16 @@ export default function Barplot() { caption="Highly customized barplot with colors, legend, labels and more." linkTo="/10-barplot-with-number-of-observation" /> + + diff --git a/src/pages/waffle-chart.js b/src/pages/waffle-chart.js index b4d734cbdd..992113b9e5 100644 --- a/src/pages/waffle-chart.js +++ b/src/pages/waffle-chart.js @@ -122,6 +122,11 @@ export default function Waffle() { caption="Waffle chart with proportions in the legend." linkTo="/503-waffle-chart-introduction" /> + diff --git a/static/graph/541-waffle-chart-with-additionnal-grouping.png b/static/graph/541-waffle-chart-with-additionnal-grouping.png new file mode 100644 index 0000000000..659c4cf758 Binary files /dev/null and b/static/graph/541-waffle-chart-with-additionnal-grouping.png differ diff --git a/static/graph/547-stacked-barplots-with-pandas-1.png b/static/graph/547-stacked-barplots-with-pandas-1.png new file mode 100644 index 0000000000..ce8bf5ed79 Binary files /dev/null and b/static/graph/547-stacked-barplots-with-pandas-1.png differ diff --git a/static/graph/547-stacked-barplots-with-pandas-2.png b/static/graph/547-stacked-barplots-with-pandas-2.png new file mode 100644 index 0000000000..9991111c15 Binary files /dev/null and b/static/graph/547-stacked-barplots-with-pandas-2.png differ