Created
October 4, 2019 22:29
-
-
Save travc/c498d16017edb3de8459d7abcee29a21 to your computer and use it in GitHub Desktop.
Plotting points on a geographic map using cartopy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Plot a list of latitude,longitude pairs on a map\n", | |
| "A lot of additional information and examples are avaialbe at: \n", | |
| "https://scitools.org.uk/cartopy/docs/latest/" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:19.885724Z", | |
| "start_time": "2019-10-04T22:25:19.287094Z" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "3.7.3 (default, Mar 27 2019, 22:11:17) \n", | |
| "[GCC 7.3.0]\n", | |
| "numpy 1.16.4\n", | |
| "pandas 0.24.2\n", | |
| "matplotlib 3.1.0\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "import sys; print(sys.version)\n", | |
| "import os\n", | |
| "\n", | |
| "import numpy as np; print('numpy', np.__version__)\n", | |
| "import pandas as pd; print('pandas',pd.__version__)\n", | |
| "\n", | |
| "import matplotlib as mpl; print('matplotlib', mpl.__version__)\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import cartopy.crs as ccrs\n", | |
| "import cartopy.feature as cfeature\n", | |
| "\n", | |
| "from IPython.display import display, HTML" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:19.897745Z", | |
| "start_time": "2019-10-04T22:25:19.887762Z" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "# Use the fancy 'notebook' version for figures (`inline` is the basic verison)\n", | |
| "%matplotlib notebook\n", | |
| "# Set the background color for figures; I need because I use a black notebook, you probably don't\n", | |
| "mpl.rcParams['figure.facecolor'] = '#BBBBBB'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:21:43.672451Z", | |
| "start_time": "2019-10-04T22:21:43.669635Z" | |
| } | |
| }, | |
| "source": [ | |
| "## Set parameters/variables\n", | |
| "For this script it is just the filename where the lat,lng data is. \n", | |
| "I find it useful to keep this sort of settings stuff up at the top of my scripts" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:19.903456Z", | |
| "start_time": "2019-10-04T22:25:19.900508Z" | |
| }, | |
| "run_control": { | |
| "marked": true | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "SITES_FILENAME = 'collection_site.csv'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### load the data using pandas\n", | |
| "Can also read excel files using `read_excel` and some other formats" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:19.921255Z", | |
| "start_time": "2019-10-04T22:25:19.906126Z" | |
| } | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "data = pd.read_csv(SITES_FILENAME, comment='#', index_col=0)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "Display the first few lines of `data` just to check it" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:19.936939Z", | |
| "start_time": "2019-10-04T22:25:19.923125Z" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>name</th>\n", | |
| " <th>district</th>\n", | |
| " <th>latitude</th>\n", | |
| " <th>longitude</th>\n", | |
| " <th>country</th>\n", | |
| " <th>internal_notes</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>id</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>ATR</th>\n", | |
| " <td>Antaretra</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>-21.34600</td>\n", | |
| " <td>47.77050</td>\n", | |
| " <td>Madagascar</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>AMB1</th>\n", | |
| " <td>Ambatoloahy</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>-21.34620</td>\n", | |
| " <td>47.71960</td>\n", | |
| " <td>Madagascar</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>AMB2</th>\n", | |
| " <td>Amdafiatsimo</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>-21.34620</td>\n", | |
| " <td>47.69590</td>\n", | |
| " <td>Madagascar</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>KLL</th>\n", | |
| " <td>Kelilalina</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>-21.28120</td>\n", | |
| " <td>47.56020</td>\n", | |
| " <td>Madagascar</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>MR4</th>\n", | |
| " <td>CDC in Atlanta GA</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>33.79944</td>\n", | |
| " <td>-84.32833</td>\n", | |
| " <td>USA</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " name district latitude longitude country \\\n", | |
| "id \n", | |
| "ATR Antaretra NaN -21.34600 47.77050 Madagascar \n", | |
| "AMB1 Ambatoloahy NaN -21.34620 47.71960 Madagascar \n", | |
| "AMB2 Amdafiatsimo NaN -21.34620 47.69590 Madagascar \n", | |
| "KLL Kelilalina NaN -21.28120 47.56020 Madagascar \n", | |
| "MR4 CDC in Atlanta GA NaN 33.79944 -84.32833 USA \n", | |
| "\n", | |
| " internal_notes \n", | |
| "id \n", | |
| "ATR NaN \n", | |
| "AMB1 NaN \n", | |
| "AMB2 NaN \n", | |
| "KLL NaN \n", | |
| "MR4 NaN " | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### actually plot (see inline comments)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "ExecuteTime": { | |
| "end_time": "2019-10-04T22:25:20.066330Z", | |
| "start_time": "2019-10-04T22:25:19.938570Z" | |
| } | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "application/javascript": [ | |
| "/* Put everything inside the global mpl namespace */\n", | |
| "window.mpl = {};\n", | |
| "\n", | |
| "\n", | |
| "mpl.get_websocket_type = function() {\n", | |
| " if (typeof(WebSocket) !== 'undefined') {\n", | |
| " return WebSocket;\n", | |
| " } else if (typeof(MozWebSocket) !== 'undefined') {\n", | |
| " return MozWebSocket;\n", | |
| " } else {\n", | |
| " alert('Your browser does not have WebSocket support. ' +\n", | |
| " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", | |
| " 'Firefox 4 and 5 are also supported but you ' +\n", | |
| " 'have to enable WebSockets in about:config.');\n", | |
| " };\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", | |
| " this.id = figure_id;\n", | |
| "\n", | |
| " this.ws = websocket;\n", | |
| "\n", | |
| " this.supports_binary = (this.ws.binaryType != undefined);\n", | |
| "\n", | |
| " if (!this.supports_binary) {\n", | |
| " var warnings = document.getElementById(\"mpl-warnings\");\n", | |
| " if (warnings) {\n", | |
| " warnings.style.display = 'block';\n", | |
| " warnings.textContent = (\n", | |
| " \"This browser does not support binary websocket messages. \" +\n", | |
| " \"Performance may be slow.\");\n", | |
| " }\n", | |
| " }\n", | |
| "\n", | |
| " this.imageObj = new Image();\n", | |
| "\n", | |
| " this.context = undefined;\n", | |
| " this.message = undefined;\n", | |
| " this.canvas = undefined;\n", | |
| " this.rubberband_canvas = undefined;\n", | |
| " this.rubberband_context = undefined;\n", | |
| " this.format_dropdown = undefined;\n", | |
| "\n", | |
| " this.image_mode = 'full';\n", | |
| "\n", | |
| " this.root = $('<div/>');\n", | |
| " this._root_extra_style(this.root)\n", | |
| " this.root.attr('style', 'display: inline-block');\n", | |
| "\n", | |
| " $(parent_element).append(this.root);\n", | |
| "\n", | |
| " this._init_header(this);\n", | |
| " this._init_canvas(this);\n", | |
| " this._init_toolbar(this);\n", | |
| "\n", | |
| " var fig = this;\n", | |
| "\n", | |
| " this.waiting = false;\n", | |
| "\n", | |
| " this.ws.onopen = function () {\n", | |
| " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", | |
| " fig.send_message(\"send_image_mode\", {});\n", | |
| " if (mpl.ratio != 1) {\n", | |
| " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", | |
| " }\n", | |
| " fig.send_message(\"refresh\", {});\n", | |
| " }\n", | |
| "\n", | |
| " this.imageObj.onload = function() {\n", | |
| " if (fig.image_mode == 'full') {\n", | |
| " // Full images could contain transparency (where diff images\n", | |
| " // almost always do), so we need to clear the canvas so that\n", | |
| " // there is no ghosting.\n", | |
| " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", | |
| " }\n", | |
| " fig.context.drawImage(fig.imageObj, 0, 0);\n", | |
| " };\n", | |
| "\n", | |
| " this.imageObj.onunload = function() {\n", | |
| " fig.ws.close();\n", | |
| " }\n", | |
| "\n", | |
| " this.ws.onmessage = this._make_on_message_function(this);\n", | |
| "\n", | |
| " this.ondownload = ondownload;\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._init_header = function() {\n", | |
| " var titlebar = $(\n", | |
| " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", | |
| " 'ui-helper-clearfix\"/>');\n", | |
| " var titletext = $(\n", | |
| " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", | |
| " 'text-align: center; padding: 3px;\"/>');\n", | |
| " titlebar.append(titletext)\n", | |
| " this.root.append(titlebar);\n", | |
| " this.header = titletext[0];\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", | |
| "\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", | |
| "\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._init_canvas = function() {\n", | |
| " var fig = this;\n", | |
| "\n", | |
| " var canvas_div = $('<div/>');\n", | |
| "\n", | |
| " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", | |
| "\n", | |
| " function canvas_keyboard_event(event) {\n", | |
| " return fig.key_event(event, event['data']);\n", | |
| " }\n", | |
| "\n", | |
| " canvas_div.keydown('key_press', canvas_keyboard_event);\n", | |
| " canvas_div.keyup('key_release', canvas_keyboard_event);\n", | |
| " this.canvas_div = canvas_div\n", | |
| " this._canvas_extra_style(canvas_div)\n", | |
| " this.root.append(canvas_div);\n", | |
| "\n", | |
| " var canvas = $('<canvas/>');\n", | |
| " canvas.addClass('mpl-canvas');\n", | |
| " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", | |
| "\n", | |
| " this.canvas = canvas[0];\n", | |
| " this.context = canvas[0].getContext(\"2d\");\n", | |
| "\n", | |
| " var backingStore = this.context.backingStorePixelRatio ||\n", | |
| "\tthis.context.webkitBackingStorePixelRatio ||\n", | |
| "\tthis.context.mozBackingStorePixelRatio ||\n", | |
| "\tthis.context.msBackingStorePixelRatio ||\n", | |
| "\tthis.context.oBackingStorePixelRatio ||\n", | |
| "\tthis.context.backingStorePixelRatio || 1;\n", | |
| "\n", | |
| " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", | |
| "\n", | |
| " var rubberband = $('<canvas/>');\n", | |
| " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", | |
| "\n", | |
| " var pass_mouse_events = true;\n", | |
| "\n", | |
| " canvas_div.resizable({\n", | |
| " start: function(event, ui) {\n", | |
| " pass_mouse_events = false;\n", | |
| " },\n", | |
| " resize: function(event, ui) {\n", | |
| " fig.request_resize(ui.size.width, ui.size.height);\n", | |
| " },\n", | |
| " stop: function(event, ui) {\n", | |
| " pass_mouse_events = true;\n", | |
| " fig.request_resize(ui.size.width, ui.size.height);\n", | |
| " },\n", | |
| " });\n", | |
| "\n", | |
| " function mouse_event_fn(event) {\n", | |
| " if (pass_mouse_events)\n", | |
| " return fig.mouse_event(event, event['data']);\n", | |
| " }\n", | |
| "\n", | |
| " rubberband.mousedown('button_press', mouse_event_fn);\n", | |
| " rubberband.mouseup('button_release', mouse_event_fn);\n", | |
| " // Throttle sequential mouse events to 1 every 20ms.\n", | |
| " rubberband.mousemove('motion_notify', mouse_event_fn);\n", | |
| "\n", | |
| " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", | |
| " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", | |
| "\n", | |
| " canvas_div.on(\"wheel\", function (event) {\n", | |
| " event = event.originalEvent;\n", | |
| " event['data'] = 'scroll'\n", | |
| " if (event.deltaY < 0) {\n", | |
| " event.step = 1;\n", | |
| " } else {\n", | |
| " event.step = -1;\n", | |
| " }\n", | |
| " mouse_event_fn(event);\n", | |
| " });\n", | |
| "\n", | |
| " canvas_div.append(canvas);\n", | |
| " canvas_div.append(rubberband);\n", | |
| "\n", | |
| " this.rubberband = rubberband;\n", | |
| " this.rubberband_canvas = rubberband[0];\n", | |
| " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", | |
| " this.rubberband_context.strokeStyle = \"#000000\";\n", | |
| "\n", | |
| " this._resize_canvas = function(width, height) {\n", | |
| " // Keep the size of the canvas, canvas container, and rubber band\n", | |
| " // canvas in synch.\n", | |
| " canvas_div.css('width', width)\n", | |
| " canvas_div.css('height', height)\n", | |
| "\n", | |
| " canvas.attr('width', width * mpl.ratio);\n", | |
| " canvas.attr('height', height * mpl.ratio);\n", | |
| " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", | |
| "\n", | |
| " rubberband.attr('width', width);\n", | |
| " rubberband.attr('height', height);\n", | |
| " }\n", | |
| "\n", | |
| " // Set the figure to an initial 600x600px, this will subsequently be updated\n", | |
| " // upon first draw.\n", | |
| " this._resize_canvas(600, 600);\n", | |
| "\n", | |
| " // Disable right mouse context menu.\n", | |
| " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", | |
| " return false;\n", | |
| " });\n", | |
| "\n", | |
| " function set_focus () {\n", | |
| " canvas.focus();\n", | |
| " canvas_div.focus();\n", | |
| " }\n", | |
| "\n", | |
| " window.setTimeout(set_focus, 100);\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._init_toolbar = function() {\n", | |
| " var fig = this;\n", | |
| "\n", | |
| " var nav_element = $('<div/>');\n", | |
| " nav_element.attr('style', 'width: 100%');\n", | |
| " this.root.append(nav_element);\n", | |
| "\n", | |
| " // Define a callback function for later on.\n", | |
| " function toolbar_event(event) {\n", | |
| " return fig.toolbar_button_onclick(event['data']);\n", | |
| " }\n", | |
| " function toolbar_mouse_event(event) {\n", | |
| " return fig.toolbar_button_onmouseover(event['data']);\n", | |
| " }\n", | |
| "\n", | |
| " for(var toolbar_ind in mpl.toolbar_items) {\n", | |
| " var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
| " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
| " var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
| " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
| "\n", | |
| " if (!name) {\n", | |
| " // put a spacer in here.\n", | |
| " continue;\n", | |
| " }\n", | |
| " var button = $('<button/>');\n", | |
| " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", | |
| " 'ui-button-icon-only');\n", | |
| " button.attr('role', 'button');\n", | |
| " button.attr('aria-disabled', 'false');\n", | |
| " button.click(method_name, toolbar_event);\n", | |
| " button.mouseover(tooltip, toolbar_mouse_event);\n", | |
| "\n", | |
| " var icon_img = $('<span/>');\n", | |
| " icon_img.addClass('ui-button-icon-primary ui-icon');\n", | |
| " icon_img.addClass(image);\n", | |
| " icon_img.addClass('ui-corner-all');\n", | |
| "\n", | |
| " var tooltip_span = $('<span/>');\n", | |
| " tooltip_span.addClass('ui-button-text');\n", | |
| " tooltip_span.html(tooltip);\n", | |
| "\n", | |
| " button.append(icon_img);\n", | |
| " button.append(tooltip_span);\n", | |
| "\n", | |
| " nav_element.append(button);\n", | |
| " }\n", | |
| "\n", | |
| " var fmt_picker_span = $('<span/>');\n", | |
| "\n", | |
| " var fmt_picker = $('<select/>');\n", | |
| " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", | |
| " fmt_picker_span.append(fmt_picker);\n", | |
| " nav_element.append(fmt_picker_span);\n", | |
| " this.format_dropdown = fmt_picker[0];\n", | |
| "\n", | |
| " for (var ind in mpl.extensions) {\n", | |
| " var fmt = mpl.extensions[ind];\n", | |
| " var option = $(\n", | |
| " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", | |
| " fmt_picker.append(option);\n", | |
| " }\n", | |
| "\n", | |
| " // Add hover states to the ui-buttons\n", | |
| " $( \".ui-button\" ).hover(\n", | |
| " function() { $(this).addClass(\"ui-state-hover\");},\n", | |
| " function() { $(this).removeClass(\"ui-state-hover\");}\n", | |
| " );\n", | |
| "\n", | |
| " var status_bar = $('<span class=\"mpl-message\"/>');\n", | |
| " nav_element.append(status_bar);\n", | |
| " this.message = status_bar[0];\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", | |
| " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
| " // which will in turn request a refresh of the image.\n", | |
| " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.send_message = function(type, properties) {\n", | |
| " properties['type'] = type;\n", | |
| " properties['figure_id'] = this.id;\n", | |
| " this.ws.send(JSON.stringify(properties));\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.send_draw_message = function() {\n", | |
| " if (!this.waiting) {\n", | |
| " this.waiting = true;\n", | |
| " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
| " var format_dropdown = fig.format_dropdown;\n", | |
| " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", | |
| " fig.ondownload(fig, format);\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", | |
| " var size = msg['size'];\n", | |
| " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", | |
| " fig._resize_canvas(size[0], size[1]);\n", | |
| " fig.send_message(\"refresh\", {});\n", | |
| " };\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", | |
| " var x0 = msg['x0'] / mpl.ratio;\n", | |
| " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", | |
| " var x1 = msg['x1'] / mpl.ratio;\n", | |
| " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", | |
| " x0 = Math.floor(x0) + 0.5;\n", | |
| " y0 = Math.floor(y0) + 0.5;\n", | |
| " x1 = Math.floor(x1) + 0.5;\n", | |
| " y1 = Math.floor(y1) + 0.5;\n", | |
| " var min_x = Math.min(x0, x1);\n", | |
| " var min_y = Math.min(y0, y1);\n", | |
| " var width = Math.abs(x1 - x0);\n", | |
| " var height = Math.abs(y1 - y0);\n", | |
| "\n", | |
| " fig.rubberband_context.clearRect(\n", | |
| " 0, 0, fig.canvas.width, fig.canvas.height);\n", | |
| "\n", | |
| " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", | |
| " // Updates the figure title.\n", | |
| " fig.header.textContent = msg['label'];\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", | |
| " var cursor = msg['cursor'];\n", | |
| " switch(cursor)\n", | |
| " {\n", | |
| " case 0:\n", | |
| " cursor = 'pointer';\n", | |
| " break;\n", | |
| " case 1:\n", | |
| " cursor = 'default';\n", | |
| " break;\n", | |
| " case 2:\n", | |
| " cursor = 'crosshair';\n", | |
| " break;\n", | |
| " case 3:\n", | |
| " cursor = 'move';\n", | |
| " break;\n", | |
| " }\n", | |
| " fig.rubberband_canvas.style.cursor = cursor;\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_message = function(fig, msg) {\n", | |
| " fig.message.textContent = msg['message'];\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", | |
| " // Request the server to send over a new figure.\n", | |
| " fig.send_draw_message();\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", | |
| " fig.image_mode = msg['mode'];\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.updated_canvas_event = function() {\n", | |
| " // Called whenever the canvas gets updated.\n", | |
| " this.send_message(\"ack\", {});\n", | |
| "}\n", | |
| "\n", | |
| "// A function to construct a web socket function for onmessage handling.\n", | |
| "// Called in the figure constructor.\n", | |
| "mpl.figure.prototype._make_on_message_function = function(fig) {\n", | |
| " return function socket_on_message(evt) {\n", | |
| " if (evt.data instanceof Blob) {\n", | |
| " /* FIXME: We get \"Resource interpreted as Image but\n", | |
| " * transferred with MIME type text/plain:\" errors on\n", | |
| " * Chrome. But how to set the MIME type? It doesn't seem\n", | |
| " * to be part of the websocket stream */\n", | |
| " evt.data.type = \"image/png\";\n", | |
| "\n", | |
| " /* Free the memory for the previous frames */\n", | |
| " if (fig.imageObj.src) {\n", | |
| " (window.URL || window.webkitURL).revokeObjectURL(\n", | |
| " fig.imageObj.src);\n", | |
| " }\n", | |
| "\n", | |
| " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
| " evt.data);\n", | |
| " fig.updated_canvas_event();\n", | |
| " fig.waiting = false;\n", | |
| " return;\n", | |
| " }\n", | |
| " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", | |
| " fig.imageObj.src = evt.data;\n", | |
| " fig.updated_canvas_event();\n", | |
| " fig.waiting = false;\n", | |
| " return;\n", | |
| " }\n", | |
| "\n", | |
| " var msg = JSON.parse(evt.data);\n", | |
| " var msg_type = msg['type'];\n", | |
| "\n", | |
| " // Call the \"handle_{type}\" callback, which takes\n", | |
| " // the figure and JSON message as its only arguments.\n", | |
| " try {\n", | |
| " var callback = fig[\"handle_\" + msg_type];\n", | |
| " } catch (e) {\n", | |
| " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", | |
| " return;\n", | |
| " }\n", | |
| "\n", | |
| " if (callback) {\n", | |
| " try {\n", | |
| " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", | |
| " callback(fig, msg);\n", | |
| " } catch (e) {\n", | |
| " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", | |
| " }\n", | |
| " }\n", | |
| " };\n", | |
| "}\n", | |
| "\n", | |
| "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", | |
| "mpl.findpos = function(e) {\n", | |
| " //this section is from http://www.quirksmode.org/js/events_properties.html\n", | |
| " var targ;\n", | |
| " if (!e)\n", | |
| " e = window.event;\n", | |
| " if (e.target)\n", | |
| " targ = e.target;\n", | |
| " else if (e.srcElement)\n", | |
| " targ = e.srcElement;\n", | |
| " if (targ.nodeType == 3) // defeat Safari bug\n", | |
| " targ = targ.parentNode;\n", | |
| "\n", | |
| " // jQuery normalizes the pageX and pageY\n", | |
| " // pageX,Y are the mouse positions relative to the document\n", | |
| " // offset() returns the position of the element relative to the document\n", | |
| " var x = e.pageX - $(targ).offset().left;\n", | |
| " var y = e.pageY - $(targ).offset().top;\n", | |
| "\n", | |
| " return {\"x\": x, \"y\": y};\n", | |
| "};\n", | |
| "\n", | |
| "/*\n", | |
| " * return a copy of an object with only non-object keys\n", | |
| " * we need this to avoid circular references\n", | |
| " * http://stackoverflow.com/a/24161582/3208463\n", | |
| " */\n", | |
| "function simpleKeys (original) {\n", | |
| " return Object.keys(original).reduce(function (obj, key) {\n", | |
| " if (typeof original[key] !== 'object')\n", | |
| " obj[key] = original[key]\n", | |
| " return obj;\n", | |
| " }, {});\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.mouse_event = function(event, name) {\n", | |
| " var canvas_pos = mpl.findpos(event)\n", | |
| "\n", | |
| " if (name === 'button_press')\n", | |
| " {\n", | |
| " this.canvas.focus();\n", | |
| " this.canvas_div.focus();\n", | |
| " }\n", | |
| "\n", | |
| " var x = canvas_pos.x * mpl.ratio;\n", | |
| " var y = canvas_pos.y * mpl.ratio;\n", | |
| "\n", | |
| " this.send_message(name, {x: x, y: y, button: event.button,\n", | |
| " step: event.step,\n", | |
| " guiEvent: simpleKeys(event)});\n", | |
| "\n", | |
| " /* This prevents the web browser from automatically changing to\n", | |
| " * the text insertion cursor when the button is pressed. We want\n", | |
| " * to control all of the cursor setting manually through the\n", | |
| " * 'cursor' event from matplotlib */\n", | |
| " event.preventDefault();\n", | |
| " return false;\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
| " // Handle any extra behaviour associated with a key event\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.key_event = function(event, name) {\n", | |
| "\n", | |
| " // Prevent repeat events\n", | |
| " if (name == 'key_press')\n", | |
| " {\n", | |
| " if (event.which === this._key)\n", | |
| " return;\n", | |
| " else\n", | |
| " this._key = event.which;\n", | |
| " }\n", | |
| " if (name == 'key_release')\n", | |
| " this._key = null;\n", | |
| "\n", | |
| " var value = '';\n", | |
| " if (event.ctrlKey && event.which != 17)\n", | |
| " value += \"ctrl+\";\n", | |
| " if (event.altKey && event.which != 18)\n", | |
| " value += \"alt+\";\n", | |
| " if (event.shiftKey && event.which != 16)\n", | |
| " value += \"shift+\";\n", | |
| "\n", | |
| " value += 'k';\n", | |
| " value += event.which.toString();\n", | |
| "\n", | |
| " this._key_event_extra(event, name);\n", | |
| "\n", | |
| " this.send_message(name, {key: value,\n", | |
| " guiEvent: simpleKeys(event)});\n", | |
| " return false;\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", | |
| " if (name == 'download') {\n", | |
| " this.handle_save(this, null);\n", | |
| " } else {\n", | |
| " this.send_message(\"toolbar_button\", {name: name});\n", | |
| " }\n", | |
| "};\n", | |
| "\n", | |
| "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", | |
| " this.message.textContent = tooltip;\n", | |
| "};\n", | |
| "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", | |
| "\n", | |
| "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", | |
| "\n", | |
| "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", | |
| " // Create a \"websocket\"-like object which calls the given IPython comm\n", | |
| " // object with the appropriate methods. Currently this is a non binary\n", | |
| " // socket, so there is still some room for performance tuning.\n", | |
| " var ws = {};\n", | |
| "\n", | |
| " ws.close = function() {\n", | |
| " comm.close()\n", | |
| " };\n", | |
| " ws.send = function(m) {\n", | |
| " //console.log('sending', m);\n", | |
| " comm.send(m);\n", | |
| " };\n", | |
| " // Register the callback with on_msg.\n", | |
| " comm.on_msg(function(msg) {\n", | |
| " //console.log('receiving', msg['content']['data'], msg);\n", | |
| " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", | |
| " ws.onmessage(msg['content']['data'])\n", | |
| " });\n", | |
| " return ws;\n", | |
| "}\n", | |
| "\n", | |
| "mpl.mpl_figure_comm = function(comm, msg) {\n", | |
| " // This is the function which gets called when the mpl process\n", | |
| " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", | |
| "\n", | |
| " var id = msg.content.data.id;\n", | |
| " // Get hold of the div created by the display call when the Comm\n", | |
| " // socket was opened in Python.\n", | |
| " var element = $(\"#\" + id);\n", | |
| " var ws_proxy = comm_websocket_adapter(comm)\n", | |
| "\n", | |
| " function ondownload(figure, format) {\n", | |
| " window.open(figure.imageObj.src);\n", | |
| " }\n", | |
| "\n", | |
| " var fig = new mpl.figure(id, ws_proxy,\n", | |
| " ondownload,\n", | |
| " element.get(0));\n", | |
| "\n", | |
| " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", | |
| " // web socket which is closed, not our websocket->open comm proxy.\n", | |
| " ws_proxy.onopen();\n", | |
| "\n", | |
| " fig.parent_element = element.get(0);\n", | |
| " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", | |
| " if (!fig.cell_info) {\n", | |
| " console.error(\"Failed to find cell for figure\", id, fig);\n", | |
| " return;\n", | |
| " }\n", | |
| "\n", | |
| " var output_index = fig.cell_info[2]\n", | |
| " var cell = fig.cell_info[0];\n", | |
| "\n", | |
| "};\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_close = function(fig, msg) {\n", | |
| " var width = fig.canvas.width/mpl.ratio\n", | |
| " fig.root.unbind('remove')\n", | |
| "\n", | |
| " // Update the output cell to use the data from the current canvas.\n", | |
| " fig.push_to_output();\n", | |
| " var dataURL = fig.canvas.toDataURL();\n", | |
| " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", | |
| " // the notebook keyboard shortcuts fail.\n", | |
| " IPython.keyboard_manager.enable()\n", | |
| " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", | |
| " fig.close_ws(fig, msg);\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.close_ws = function(fig, msg){\n", | |
| " fig.send_message('closing', msg);\n", | |
| " // fig.ws.close()\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", | |
| " // Turn the data on the canvas into data in the output cell.\n", | |
| " var width = this.canvas.width/mpl.ratio\n", | |
| " var dataURL = this.canvas.toDataURL();\n", | |
| " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.updated_canvas_event = function() {\n", | |
| " // Tell IPython that the notebook contents must change.\n", | |
| " IPython.notebook.set_dirty(true);\n", | |
| " this.send_message(\"ack\", {});\n", | |
| " var fig = this;\n", | |
| " // Wait a second, then push the new image to the DOM so\n", | |
| " // that it is saved nicely (might be nice to debounce this).\n", | |
| " setTimeout(function () { fig.push_to_output() }, 1000);\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._init_toolbar = function() {\n", | |
| " var fig = this;\n", | |
| "\n", | |
| " var nav_element = $('<div/>');\n", | |
| " nav_element.attr('style', 'width: 100%');\n", | |
| " this.root.append(nav_element);\n", | |
| "\n", | |
| " // Define a callback function for later on.\n", | |
| " function toolbar_event(event) {\n", | |
| " return fig.toolbar_button_onclick(event['data']);\n", | |
| " }\n", | |
| " function toolbar_mouse_event(event) {\n", | |
| " return fig.toolbar_button_onmouseover(event['data']);\n", | |
| " }\n", | |
| "\n", | |
| " for(var toolbar_ind in mpl.toolbar_items){\n", | |
| " var name = mpl.toolbar_items[toolbar_ind][0];\n", | |
| " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", | |
| " var image = mpl.toolbar_items[toolbar_ind][2];\n", | |
| " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", | |
| "\n", | |
| " if (!name) { continue; };\n", | |
| "\n", | |
| " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", | |
| " button.click(method_name, toolbar_event);\n", | |
| " button.mouseover(tooltip, toolbar_mouse_event);\n", | |
| " nav_element.append(button);\n", | |
| " }\n", | |
| "\n", | |
| " // Add the status bar.\n", | |
| " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", | |
| " nav_element.append(status_bar);\n", | |
| " this.message = status_bar[0];\n", | |
| "\n", | |
| " // Add the close button to the window.\n", | |
| " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", | |
| " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", | |
| " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", | |
| " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", | |
| " buttongrp.append(button);\n", | |
| " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", | |
| " titlebar.prepend(buttongrp);\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._root_extra_style = function(el){\n", | |
| " var fig = this\n", | |
| " el.on(\"remove\", function(){\n", | |
| "\tfig.close_ws(fig, {});\n", | |
| " });\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._canvas_extra_style = function(el){\n", | |
| " // this is important to make the div 'focusable\n", | |
| " el.attr('tabindex', 0)\n", | |
| " // reach out to IPython and tell the keyboard manager to turn it's self\n", | |
| " // off when our div gets focus\n", | |
| "\n", | |
| " // location in version 3\n", | |
| " if (IPython.notebook.keyboard_manager) {\n", | |
| " IPython.notebook.keyboard_manager.register_events(el);\n", | |
| " }\n", | |
| " else {\n", | |
| " // location in version 2\n", | |
| " IPython.keyboard_manager.register_events(el);\n", | |
| " }\n", | |
| "\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype._key_event_extra = function(event, name) {\n", | |
| " var manager = IPython.notebook.keyboard_manager;\n", | |
| " if (!manager)\n", | |
| " manager = IPython.keyboard_manager;\n", | |
| "\n", | |
| " // Check for shift+enter\n", | |
| " if (event.shiftKey && event.which == 13) {\n", | |
| " this.canvas_div.blur();\n", | |
| " event.shiftKey = false;\n", | |
| " // Send a \"J\" for go to next cell\n", | |
| " event.which = 74;\n", | |
| " event.keyCode = 74;\n", | |
| " manager.command_mode();\n", | |
| " manager.handle_keydown(event);\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "mpl.figure.prototype.handle_save = function(fig, msg) {\n", | |
| " fig.ondownload(fig, null);\n", | |
| "}\n", | |
| "\n", | |
| "\n", | |
| "mpl.find_output_cell = function(html_output) {\n", | |
| " // Return the cell and output element which can be found *uniquely* in the notebook.\n", | |
| " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", | |
| " // IPython event is triggered only after the cells have been serialised, which for\n", | |
| " // our purposes (turning an active figure into a static one), is too late.\n", | |
| " var cells = IPython.notebook.get_cells();\n", | |
| " var ncells = cells.length;\n", | |
| " for (var i=0; i<ncells; i++) {\n", | |
| " var cell = cells[i];\n", | |
| " if (cell.cell_type === 'code'){\n", | |
| " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", | |
| " var data = cell.output_area.outputs[j];\n", | |
| " if (data.data) {\n", | |
| " // IPython >= 3 moved mimebundle to data attribute of output\n", | |
| " data = data.data;\n", | |
| " }\n", | |
| " if (data['text/html'] == html_output) {\n", | |
| " return [cell, data, j];\n", | |
| " }\n", | |
| " }\n", | |
| " }\n", | |
| " }\n", | |
| "}\n", | |
| "\n", | |
| "// Register the function which deals with the matplotlib target/channel.\n", | |
| "// The kernel may be null if the page has been refreshed.\n", | |
| "if (IPython.notebook.kernel != null) {\n", | |
| " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", | |
| "}\n" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.Javascript object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<img src=\"data:image/png;base64,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++HjPHgMQJKLAUjCMQA5T9vAQB/mzp0Bvb5I9bgby5kz4Zg8+SXExBzDwECf2g8d5+FjAJJcDEASjgHIeeKysi7iyy8/VD3wRmKx6JGUFIlXX52JlSs/g9Xazc/7cbLGACS5GIAkHAOQ88Q9ePCzxx0EUlycga+//hhTpkzE+vXfobGxluf34xwaA5DkYgCScAxAzhMnMgCtVgMMhmKYzfUj/r3RWDF0FZJNm1Zj5sxpmDFjCt577y1cvZqOvr5f+Iof59QYgCQXA5CEYwBynri+vjuYNOkvaGi47lLo5eQk4b33lmDGjCmYP3825syZjhkzpmDJkgDMnu2HGTOm4M03A7Blyw/Ys2cjpk+fgtdemwU/Px+8/vo8zJ8/G319dzAwcJ/Rx7k8BiDJxQAk4RiAnCdOkuzw95+KX/3qV6iszHEo/PT6ImzfvgbTpk3C119/jMrKIvT13YHV2oXbt80YGHgASZJgtw+gr+8u2toakZaWiJiYcNhs3ZAkOwYG7qO9vQk9PW1qPxTcOBoDkORiAJJwDEDOU9fffw96fQVefvn/w+nTR1FQkDpi8F27dgErVnzy2Kt7Z86cwN27Nr5qx3nUGIAkFwOQhGMAcp6+hoYa7NmzBW++GYDAwG+GPp9nNGrw8cdL8dZbC3H9+hX8/LNl6NU9jvPEMQBJLgYgCccA5J6V9fc/wK5dGzFx4p8xa5YvfH1fRnp6Euz2frVvGsfJGgOQ5GIAknAMQO5ZmiTZce/eT0MHZnDcszQGIMnFACThGIAcx3HuGQOQ5GIAknAMQI7jOPeMAUhyMQBJOAYgx3Gce8YAJLkYgCQcA5DjOM49YwCSXAxAEo4ByHEc554xAEkuBiAJxwDkOI5zzxiAJBcDkIRjAHIcx7lnDECSiwFIwjEAOY7j3DMGIMnFACThGIAcx3HuGQOQ5GIAknAMQI7jOPeMAUhyMQBJOAYgx3Gce8YAJLkYgCQcA5DjOM49YwCSXAxAEo4ByHEc554xAEkuBiAJxwDkOI5zzxiAJBcDkIRjAHIcx7lnDECSiwFIwjEAOY7j3DMGIMnFACThGIAcx3HuGQOQ5GIAknAMQI7jOPeMAUhyMQBJOAYgx3Gce8YAJLkYgCQcA5DjOM49YwCSXAxAEm4wAMPDw1FRUUFERILExMQwAEkWBiAJFx8fj1/96ldEROQGf/d3f4fY2FjV//9+8mwMQHKL+Ph4hIaGEhGRYIw/koMBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORlGIBEREREXoYBSERERORl/n+5DOA/xtfvkwAAAABJRU5ErkJggg==\" width=\"640\">" | |
| ], | |
| "text/plain": [ | |
| "<IPython.core.display.HTML object>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Text(0.5, 1.0, 'collection_site.csv')" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "# Create a matplotlib figure and axes (subplot)\n", | |
| "# The `ccrs.PlanetCarree()` part tells it to use a particular cartopy projection, there are alternatives\n", | |
| "fig = plt.figure()\n", | |
| "ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())\n", | |
| "ax.set_extent([-20, 60, -40, 45], crs=ccrs.PlateCarree())\n", | |
| "\n", | |
| "# Add map features to the axes (I've left some additional ones to try commented out)\n", | |
| "# ax.stock_img() # use a shaded releif map\n", | |
| "ax.add_feature(cfeature.LAND)\n", | |
| "# ax.add_feature(cfeature.OCEAN)\n", | |
| "ax.add_feature(cfeature.COASTLINE, linestyle='-', linewidth=0.5)\n", | |
| "ax.add_feature(cfeature.BORDERS, linestyle=':', linewidth=0.5)\n", | |
| "# ax.add_feature(cfeature.LAKES, alpha=0.5)\n", | |
| "# ax.add_feature(cfeature.RIVERS)\n", | |
| "\n", | |
| "# The actual latitude and longitude data\n", | |
| "lat = data['latitude']\n", | |
| "lng = data['longitude']\n", | |
| "\n", | |
| "ax.scatter(lng, lat, \n", | |
| " s=32, # size, could be list with a size for each point\n", | |
| " marker='o',\n", | |
| " facecolor='r',\n", | |
| " edgecolor='k',\n", | |
| " linewidth=1, # thickness of the edge of each marker\n", | |
| " alpha=0.5, # transparency (1 is opaque)\n", | |
| " clip_on=False); # plot even if a point is outside the map\n", | |
| "# there are lots of other options for `scatter`, and `plot` would work too: \n", | |
| "# https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.scatter.html\n", | |
| "\n", | |
| "# add a title\n", | |
| "ax.set_title(SITES_FILENAME)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "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.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment