{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/YoraiLevi/interactive_matplotlib/blob/master/examples/draggable_line_matplotlib_widgets.ipynb)\n", "[![Open in Jupyterlite](https://img.shields.io/badge/Open_In_Jupyterlite-yellow?style=flat&logo=jupyter&labelColor=grey)](https://jupyter.org/try-jupyter/lab/index.html?fromURL=https://raw.githubusercontent.com/YoraiLevi/interactive_matplotlib/refs/heads/master/examples/draggable_line_matplotlib_widgets.ipynb)\n", "[![Download](https://img.shields.io/badge/Download-grey)](https://raw.githubusercontent.com/YoraiLevi/interactive_matplotlib/refs/heads/master/examples/draggable_line_matplotlib_widgets.ipynb)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zNZ69Vt5gCR1", "outputId": "872e4c7f-bbce-4ea4-cb32-accd03e734d4", "trusted": true }, "outputs": [], "source": [ "%pip install mpl-draggable-line mpl-pan-zoom numpy matplotlib ipympl" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 37 }, "id": "_6yzZWfUgCR1", "outputId": "f6a8c9bf-c5b4-4092-ce3a-a0e3343aaa71", "trusted": true }, "outputs": [ { "data": { "text/plain": [ "'ipympl'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import mpl_draggable_line as dl\n", "%matplotlib ipympl\n", "try:\n", " from google.colab import output\n", " output.enable_custom_widget_manager()\n", "except:\n", " pass\n", "matplotlib.get_backend()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 187 }, "id": "Np3Ka5HigCR2", "outputId": "78b04ae6-b1d6-4579-e8b0-e72ebaa6457f", "trusted": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import mpl_pan_zoom as pnzm\n", "pnzm.zoom_factory" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "GGJ5S_0kgCR2", "trusted": true }, "outputs": [], "source": [ "# https://github.com/mpl-extensions/mpl-pan-zoom/blob/823829ea774655701ffa6bbded1a97b4a9bf6f23/mpl_pan_zoom/_zoom.py#L9\n", "def zoom_factory(ax, base_scale=1.1):\n", " \"\"\"\n", " Add ability to zoom with the scroll wheel.\n", "\n", "\n", " Parameters\n", " ----------\n", " ax : matplotlib axes object\n", " axis on which to implement scroll to zoom\n", " base_scale : float\n", " how much zoom on each tick of scroll wheel\n", "\n", " Returns\n", " -------\n", " disconnect_zoom : function\n", " call this to disconnect the scroll listener\n", " \"\"\"\n", "\n", " def limits_to_range(lim):\n", " return lim[1] - lim[0]\n", "\n", " fig = ax.get_figure() # get the figure of interest\n", " if hasattr(fig.canvas, \"capture_scroll\"):\n", " fig.canvas.capture_scroll = True\n", " has_toolbar = hasattr(fig.canvas, \"toolbar\") and fig.canvas.toolbar is not None\n", " if has_toolbar:\n", " # it might be possible to have an interactive backend without\n", " # a toolbar. I'm not sure so being safe here\n", " toolbar = fig.canvas.toolbar\n", " orig_xlim = ax.get_xlim()\n", " orig_ylim = ax.get_ylim()\n", " orig_yrange = limits_to_range(orig_ylim)\n", " orig_xrange = limits_to_range(orig_xlim)\n", " orig_center = ((orig_xlim[0] + orig_xlim[1]) / 2, (orig_ylim[0] + orig_ylim[1]) / 2)\n", "\n", " def zoom_fun(event):\n", " if has_toolbar:\n", " toolbar.push_current()\n", " if event.inaxes is not ax:\n", " return\n", " # get the current x and y limits\n", " cur_xlim = ax.get_xlim()\n", " cur_ylim = ax.get_ylim()\n", " xdata = event.xdata # get event x location\n", " ydata = event.ydata # get event y location\n", " if event.button == \"up\":\n", " # deal with zoom in\n", " scale_factor = base_scale\n", " elif event.button == \"down\":\n", " # deal with zoom out\n", " scale_factor = 1 / base_scale\n", " else:\n", " # deal with something that should never happen\n", " scale_factor = 1\n", " # set new limits\n", " new_xlim = [\n", " xdata - (xdata - cur_xlim[0]) / scale_factor,\n", " xdata + (cur_xlim[1] - xdata) / scale_factor,\n", " ]\n", " new_ylim = [\n", " ydata - (ydata - cur_ylim[0]) / scale_factor,\n", " ydata + (cur_ylim[1] - ydata) / scale_factor,\n", " ]\n", " ax.set_xlim(new_xlim)\n", " ax.set_ylim(new_ylim)\n", "\n", " ax.figure.canvas.draw_idle() # force re-draw\n", "\n", " # attach the call back\n", " cid = fig.canvas.mpl_connect(\"scroll_event\", zoom_fun)\n", "\n", " def disconnect_zoom():\n", " fig.canvas.mpl_disconnect(cid)\n", "\n", " # return the disconnect function\n", " return disconnect_zoom" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 569, "referenced_widgets": [ "6bd51fb6442d4eadb282f4b93d4eec58", "91703472e61d42cb811ba98a7bdaad8f", "659df1586d774df0a5670534a36ced24", "0c8a7e49269e4ee090b5a41b2ea2e1e4" ] }, "id": "Eyw2et8OgCR3", "outputId": "9a476833-16ff-4b60-a38f-1e61d4375743", "trusted": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5438f7b91b104783924747441a0f8a47", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(capture_scroll=True, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "figure, ax = plt.subplots()\n", "pm = pnzm.PanManager(figure,button=3)\n", "zoom_factory(ax)\n", "ax.set_xlim(-1,1)\n", "ax.set_ylim(-1,1)\n", "line = dl.DraggableLine(ax,[0.3,0.5],[0.3,0.5],grab_range=1)" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": ".venv", "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.10.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "0c8a7e49269e4ee090b5a41b2ea2e1e4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "659df1586d774df0a5670534a36ced24": { "model_module": "jupyter-matplotlib", "model_module_version": "^0.11", "model_name": "ToolbarModel", "state": { "_current_action": "", "_dom_classes": [], "_model_module": "jupyter-matplotlib", "_model_module_version": "^0.11", "_model_name": "ToolbarModel", "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "^0.11", "_view_name": "ToolbarView", "button_style": "", "collapsed": true, "layout": "IPY_MODEL_0c8a7e49269e4ee090b5a41b2ea2e1e4", "orientation": "vertical", "toolitems": [ [ "Home", "Reset original view", "home", "home" ], [ "Back", "Back to previous view", "arrow-left", "back" ], [ "Forward", "Forward to next view", "arrow-right", "forward" ], [ "Pan", "Left button pans, Right button zooms\nx/y fixes axis, CTRL fixes aspect", "arrows", "pan" ], [ "Zoom", "Zoom to rectangle\nx/y fixes axis", "square-o", "zoom" ], [ "Download", "Download plot", "floppy-o", "save_figure" ] ] } }, "6bd51fb6442d4eadb282f4b93d4eec58": { "model_module": "jupyter-matplotlib", "model_module_version": "^0.11", "model_name": "MPLCanvasModel", "state": { "_cursor": "default", "_data_url": "data:image/png;base64,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", "_dom_classes": [], "_figure_label": "Figure 1", "_image_mode": "diff", "_message": "", "_model_module": "jupyter-matplotlib", "_model_module_version": "^0.11", "_model_name": "MPLCanvasModel", "_rubberband_height": 0, "_rubberband_width": 0, "_rubberband_x": 0, "_rubberband_y": 0, "_size": [ 640, 480 ], "_view_count": null, "_view_module": "jupyter-matplotlib", "_view_module_version": "^0.11", "_view_name": "MPLCanvasView", "capture_scroll": true, "footer_visible": true, "header_visible": true, "layout": "IPY_MODEL_91703472e61d42cb811ba98a7bdaad8f", "pan_zoom_throttle": 33, "resizable": true, "toolbar": "IPY_MODEL_659df1586d774df0a5670534a36ced24", "toolbar_position": "left", "toolbar_visible": "fade-in-fade-out" } }, "91703472e61d42cb811ba98a7bdaad8f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } } } }, "nbformat": 4, "nbformat_minor": 0 }