{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# NCL_bar_11.py\nThis script illustrates the following concepts:\n   - Drawing filled bars using solid colors\n   - Setting the minimum/maximum value of the X and Y axis in a bar plot\n   - Paneling bar plots\n   - Drawing a custom legend\n   - Generating random data using numpy\n\nSee following URLs to see the reproduced NCL plot & script:\n    - Original NCL script: https://www.ncl.ucar.edu/Applications/Scripts/bar_11.ncl\n    - Original NCL plot: https://www.ncl.ucar.edu/Applications/Images/bar_11_lg.png\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Import packages:\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport geocat.viz.util as gvutil"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Generate dummy data:\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "num_months = 12\nbars_per_panel = 4\npanels = 4\ndata = np.random.uniform(0.1, 1.15, (panels, bars_per_panel, num_months))\n\nmonths = [\n    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov',\n    'Dec'\n]"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "Plot:\n\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "fig, axs = plt.subplots(2, 2, figsize=(12, 8), gridspec_kw=dict(wspace=0.25))\nx = np.arange(len(months))  # where to draw x ticks\nwidth = 0.2  # width of each bar within the groups\n\n# Create the subplots using a loop\npanel = 0\nfor row in range(0, 2):\n    for col in range(0, 2):\n        # Use geocat.viz.util convenience function to set axes parameters\n        gvutil.set_axes_limits_and_ticks(axs[row][col],\n                                         ylim=(0.4, 1.2),\n                                         xticks=x,\n                                         yticks=np.arange(0.4, 1.4, 0.2),\n                                         xticklabels=months)\n        # Use geocat.viz.util convenience function to add minor and major tick lines\n        gvutil.add_major_minor_ticks(axs[row][col],\n                                     x_minor_per_major=1,\n                                     y_minor_per_major=4,\n                                     labelsize=12)\n        # Use geocat.viz.util convenience function to set titles and labels\n        gvutil.set_titles_and_labels(axs[row][col],\n                                     ylabel='(\\u00B0C)',\n                                     labelfontsize=14)\n\n        # Add overall figure title\n        fig.suptitle('Paneling bar plots, dummy data', size=20, y=0.94)\n\n        # Add data to subplot\n        axs[row][col].bar(x - width * 3 / 2,\n                          data[panel][0][:],\n                          width,\n                          edgecolor='black',\n                          linewidth=0.25,\n                          color='red',\n                          label='first')\n        axs[row][col].bar(x - width / 2,\n                          data[panel][1][:],\n                          width,\n                          edgecolor='black',\n                          linewidth=0.25,\n                          color='lightsteelblue',\n                          label='second')\n        axs[row][col].bar(x + width / 2,\n                          data[panel][2][:],\n                          width,\n                          edgecolor='black',\n                          linewidth=0.25,\n                          color='blue',\n                          label='third')\n        axs[row][col].bar(x + width * 3 / 2,\n                          data[panel][3][:],\n                          width,\n                          edgecolor='black',\n                          linewidth=0.25,\n                          color='lime',\n                          label='fourth')\n        panel += 1\n\n# Add legend with `figlegend()` to position it relative to figure instead of subplots\nhandles, labels = axs[0][0].get_legend_handles_labels()\nfig.legend(handles,\n           labels,\n           ncol=4,\n           loc='lower center',\n           fontsize=14,\n           columnspacing=5,\n           frameon=False)\n\nplt.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.7.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}