muneebalam/scrapenhl2

View on GitHub
examples/Rink Image.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/muneebalam/anaconda/lib/python3.6/site-packages/ggplot/utils.py:81: FutureWarning: pandas.tslib is deprecated and will be removed in a future version.\n",
      "You can access Timestamp as pandas.Timestamp\n",
      "  pd.tslib.Timestamp,\n",
      "/Users/muneebalam/anaconda/lib/python3.6/site-packages/ggplot/stats/smoothers.py:4: FutureWarning: The pandas.lib module is deprecated and will be removed in a future version. These are private functions and can be accessed from pandas._libs.lib instead\n",
      "  from pandas.lib import Timestamp\n",
      "/Users/muneebalam/anaconda/lib/python3.6/site-packages/statsmodels/compat/pandas.py:56: FutureWarning: The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n",
      "  from pandas.core import datetools\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from matplotlib.patches import Circle, Polygon\n",
    "from matplotlib.collections import PatchCollection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_rink_boundaries(ax):\n",
    "    # Center ice and bluelines\n",
    "    for x, c in zip((-25, 0, 25), ('b', 'r', 'b')):\n",
    "        ax.plot([x, x], [-42.5, 42.5], c=c)\n",
    "    \n",
    "    # Center circle\n",
    "    p = Circle((0, 0), radius=15)\n",
    "    p = PatchCollection([p])\n",
    "    p.set_edgecolor('deepskyblue')\n",
    "    p.set_facecolor('w')\n",
    "    ax.add_collection(p)\n",
    "    \n",
    "    # Four corners\n",
    "    rad_x = 13\n",
    "    rad_y = 15\n",
    "    center_x = 87\n",
    "    center_y = 27.5\n",
    "    xs = []\n",
    "    ys = []\n",
    "    for quadrant in range(4):\n",
    "        xmult = 1\n",
    "        ymult = 1\n",
    "        if quadrant == 1 or quadrant == 2:\n",
    "            xmult = -1\n",
    "        if quadrant == 2 or quadrant == 3:\n",
    "            ymult = -1\n",
    "        \n",
    "        start = quadrant * np.pi / 2\n",
    "        end = start + np.pi / 2\n",
    "        angles = np.linspace(start, end, num=20)\n",
    "        \n",
    "        # Add start\n",
    "        xs.append(np.cos(start) * rad_x + center_x * xmult)\n",
    "        ys.append(np.sin(start) * rad_y + center_y * ymult)\n",
    "        \n",
    "        for angle in angles:\n",
    "            xs.append(np.cos(angle) * rad_x + center_x * xmult)\n",
    "            ys.append(np.sin(angle) * rad_y + center_y * ymult)\n",
    "        \n",
    "        # Add end\n",
    "        xs.append(np.cos(end) * rad_x + center_x * xmult)\n",
    "        ys.append(np.sin(end) * rad_y + center_y * ymult)\n",
    "    \n",
    "    # Add in starting point again\n",
    "    xs.append(np.cos(0) * rad_x + center_x)\n",
    "    ys.append(np.sin(0) * rad_y + center_y)\n",
    "        \n",
    "    ax.plot(xs, ys, color='k')        \n",
    "            \n",
    "        \n",
    "def foxy(reduced=False):\n",
    "    for y in [-22, 22]:\n",
    "        for x in [-69, 69]:\n",
    "            yield x, y\n",
    "        if not reduced:\n",
    "            for x in [-20, 20]:\n",
    "                yield x, y\n",
    "            \n",
    "            \n",
    "def add_faceoff_dots(ax):\n",
    "    patches = []\n",
    "    for x, y in foxy(): \n",
    "        patches.append(Circle((x, y), radius=1))\n",
    "    p = PatchCollection(patches)\n",
    "    p.set_color('r')\n",
    "    \n",
    "    ax.add_collection(p)\n",
    "    \n",
    "    \n",
    "def add_faceoff_dashes(ax):\n",
    "    # Around the inner circle, four lines    \n",
    "    for x, y in foxy(reduced=True):\n",
    "        for dx1, dx2 in ((-2, -6), (2, 6)):\n",
    "            for dy1, dy2 in ((-0.75, -0.75), (0.75, 0.75)):\n",
    "                ax.plot([x-dx1, x-dx2], [y-dy1, y-dy2], color='r')\n",
    "                \n",
    "    for x, y in foxy(reduced=True):\n",
    "        for dx1, dx2 in ((2, 2), (-2, -2)):\n",
    "            for dy1, dy2 in ((0.75, 3.75), (-0.75, -3.75)):\n",
    "                ax.plot([x-dx1, x-dx2], [y-dy1, y-dy2], color='r')\n",
    "    \n",
    "    # Around the outer circles, short lines\n",
    "    for x, y in foxy(reduced=True):\n",
    "        for dx1, dx2 in ((-6, -6), (6, 6)):\n",
    "            for dy1, dy2 in ((-15, -17), (15, 17)):\n",
    "                ax.plot([x-dx1, x-dx2], [y-dy1, y-dy2], color='r')\n",
    "                \n",
    "def add_faceoff_circles(ax):\n",
    "    patches = []\n",
    "    for x, y in foxy(reduced=True): \n",
    "        patches.append(Circle((x, y), radius=15))\n",
    "    p = PatchCollection(patches)\n",
    "    p.set_edgecolor('r')\n",
    "    p.set_facecolor('w')\n",
    "    \n",
    "    ax.add_collection(p)\n",
    "\n",
    "def add_goal_lines(ax):\n",
    "    xs = [89, 89, -89, -89]\n",
    "    ys = [42.5 - 15 + np.sqrt(209), -1 * (42.5 - 15 + np.sqrt(209))]\n",
    "    ax.plot(xs[:2], ys, color='r')\n",
    "    ax.plot(xs[2:], ys, color='r')\n",
    "    \n",
    "def add_nets(ax):\n",
    "    # Black background\n",
    "    for mult in (-1, 1):\n",
    "        ax.plot(np.array([90, 92, 92, 90]) * mult, [-3, -3, 3, 3], color='k')\n",
    "        \n",
    "    # Creases \n",
    "    patches = []\n",
    "    yseq = np.linspace(-4, 4, num=100)\n",
    "    for xmult in (-1, 1):\n",
    "        x1 = (83 + yseq**2 / 16 * 1.5) * xmult\n",
    "        xy = np.array(list(zip(x1, yseq)))\n",
    "        xy = np.vstack([np.array([[89 * xmult, -4]]), xy, np.array([[89 * xmult, 4]])])\n",
    "        patches.append(Polygon(xy))\n",
    "    p = PatchCollection(patches)\n",
    "    p.set_edgecolor('r')\n",
    "    p.set_facecolor('deepskyblue')\n",
    "    ax.add_collection(p)\n",
    "    \n",
    "        \n",
    "def add_restricted_areas(ax):\n",
    "    for xmult in (-1, 1):\n",
    "        for ymult in (-1, 1):\n",
    "            ax.plot([89 * xmult, 100 * xmult], [11 * ymult, 14 * ymult], color='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-100.0, 100.0, -45.0, 45.0)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x119bf6048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = plt.figure(figsize=[8, 4])\n",
    "ax = plt.gca()\n",
    "add_rink_boundaries(ax)\n",
    "\n",
    "add_faceoff_dashes(ax)\n",
    "add_faceoff_circles(ax)\n",
    "add_faceoff_dots(ax) # put this later to get zorder right\n",
    "\n",
    "add_goal_lines(ax)\n",
    "add_nets(ax)\n",
    "add_restricted_areas(ax)\n",
    "\n",
    "ax.set_xlim(-100, 100)\n",
    "ax.set_ylim(-45, 45)\n",
    "plt.axis('off')"
   ]
  }
 ],
 "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.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}