# IPyOverlay
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![PyPI version](https://badge.fury.io/py/ipyoverlay.svg)](https://badge.fury.io/py/ipyoverlay)
[![License](https://img.shields.io/pypi/l/ipyoverlay)](https://github.com/ORNL/ipyoverlay/blob/main/LICENSE)
IPyOverlay is a library of IPyWidget "wrapper components" that support rendering widgets on top of other
widgets with arbitrary/controllable positioning. This allows interfaces with
overlay elements, e.g. pop-up windows, custom context menus, etc.
The intent is to provide the mechanisms necessary to implement more complex
details-on-demand functionality (one part of the visual information-seeking mantra published
in [The Eyes Have it: A Task by Data Type Taxonomy for Information Visualizations](https://doi.org/10.1016/B978-155860915-0/50046-9)),
for dashboards and visualizations that allow a user to hone in and get more
in-depth information or additional plots when requested.
## Installation
IPyOverlay can be installed via `pip` with:
```
pip install ipyoverlay
```
## Documentation
WIP
## Screenshots
![Demo GIF of interacting with a plot with ipyoverlay](img/demo.gif)
A GIF demoing interaction with an ipympl Matplotlib figure. In the demo,
Clicking a cluster opens a pop-up window with a new figure.
![Figures rendered on top of other figures](img/overlay_figures.png)
The background Matplotlib figure shown is rendered as an interactive ipympl
widget and wrapped in IPyOverlay’s `OverlayContainer`, and shows a UMAP of
clustered embeddings. Clicking a cluster or right-clicking and selecting an
exhibit creates a click-and-draggable pop-up window containing a new
visualization that plots more details for the selected cluster. Optionally, each
pop-up window can show a line connecting the window to the center of the cluster
it is associated with in the underlying figure.
![Right click context menu](img/context_menu.png)
Custom actions can be added as A right-click menu to any widget. This menu is
specific to this Matplotlib UMAP and allows users to choose whether to open a
violin or distribution plot for the hovered cluster.
![Overlay widgets can span larger areas in the notebook](img/overlay_figures_over_multiple.png)
If multiple separate “background” widgets (Matplotlib UMAP on the left and
Plotly map on the right) are wrapped in an `OverlayContainer`, overlay widgets
can be displayed and dragged over all of them.
## Citation
To cite usage of IPyOverlay, you can use the following bibtex:
```bibtex
@misc{doecode_127817,
title = {IPyOverlay},
author = {Martindale, Nathan and Smith, Jacob and Linville, Lisa and Hite, Jason and Adams, Mark and Stewart, Scott},
abstractNote = {IPyOverlay is a Python library that provides several IPyWidget components for use within the Jupyter software ecosystem. These components add novel UI capabilities to enable details-on-demand interaction paradigms by providing the ability to render widgets on top of other widgets with arbitrary and controllable positioning. This capability enables adding click-and-draggable overlay windows containing other widgets, right-click context menus, and more complex tooltip functionality.},
doi = {10.11578/dc.20240530.1},
url = {https://doi.org/10.11578/dc.20240530.1},
howpublished = {[Computer Software] \url{https://doi.org/10.11578/dc.20240530.1}},
year = {2024},
month = {may}
}
```
Raw data
{
"_id": null,
"home_page": "https://github.com/ORNL/ipyoverlay",
"name": "ipyoverlay",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "widget, details-on-demand, overlay, ipywidget, jupyter",
"author": "Nathan Martindale, Jacob Smith, Jason Hite, Scott L. Stewart, Mark Adams, Lisa Linville",
"author_email": "ipyoverlay-help@ornl.gov",
"download_url": "https://files.pythonhosted.org/packages/a0/6d/c5e6ee1e00f44bf753b57d5135057d310f920d64f6767ffaf8700d65ec99/ipyoverlay-0.1.0.tar.gz",
"platform": null,
"description": "# IPyOverlay\n\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![PyPI version](https://badge.fury.io/py/ipyoverlay.svg)](https://badge.fury.io/py/ipyoverlay)\n[![License](https://img.shields.io/pypi/l/ipyoverlay)](https://github.com/ORNL/ipyoverlay/blob/main/LICENSE)\n\nIPyOverlay is a library of IPyWidget \"wrapper components\" that support rendering widgets on top of other\nwidgets with arbitrary/controllable positioning. This allows interfaces with\noverlay elements, e.g. pop-up windows, custom context menus, etc.\n\nThe intent is to provide the mechanisms necessary to implement more complex\ndetails-on-demand functionality (one part of the visual information-seeking mantra published\nin [The Eyes Have it: A Task by Data Type Taxonomy for Information Visualizations](https://doi.org/10.1016/B978-155860915-0/50046-9)),\nfor dashboards and visualizations that allow a user to hone in and get more\nin-depth information or additional plots when requested.\n\n\n## Installation\n\nIPyOverlay can be installed via `pip` with:\n\n```\npip install ipyoverlay\n```\n\n## Documentation\n\nWIP\n\n## Screenshots\n\n![Demo GIF of interacting with a plot with ipyoverlay](img/demo.gif)\nA GIF demoing interaction with an ipympl Matplotlib figure. In the demo,\nClicking a cluster opens a pop-up window with a new figure.\n\n![Figures rendered on top of other figures](img/overlay_figures.png)\nThe background Matplotlib figure shown is rendered as an interactive ipympl\nwidget and wrapped in IPyOverlay\u2019s `OverlayContainer`, and shows a UMAP of\nclustered embeddings. Clicking a cluster or right-clicking and selecting an\nexhibit creates a click-and-draggable pop-up window containing a new\nvisualization that plots more details for the selected cluster. Optionally, each\npop-up window can show a line connecting the window to the center of the cluster\nit is associated with in the underlying figure.\n\n![Right click context menu](img/context_menu.png)\nCustom actions can be added as A right-click menu to any widget. This menu is\nspecific to this Matplotlib UMAP and allows users to choose whether to open a\nviolin or distribution plot for the hovered cluster.\n\n![Overlay widgets can span larger areas in the notebook](img/overlay_figures_over_multiple.png)\nIf multiple separate \u201cbackground\u201d widgets (Matplotlib UMAP on the left and\nPlotly map on the right) are wrapped in an `OverlayContainer`, overlay widgets\ncan be displayed and dragged over all of them.\n\n## Citation\n\nTo cite usage of IPyOverlay, you can use the following bibtex:\n\n```bibtex\n@misc{doecode_127817,\n title = {IPyOverlay},\n author = {Martindale, Nathan and Smith, Jacob and Linville, Lisa and Hite, Jason and Adams, Mark and Stewart, Scott},\n abstractNote = {IPyOverlay is a Python library that provides several IPyWidget components for use within the Jupyter software ecosystem. These components add novel UI capabilities to enable details-on-demand interaction paradigms by providing the ability to render widgets on top of other widgets with arbitrary and controllable positioning. This capability enables adding click-and-draggable overlay windows containing other widgets, right-click context menus, and more complex tooltip functionality.},\n doi = {10.11578/dc.20240530.1},\n url = {https://doi.org/10.11578/dc.20240530.1},\n howpublished = {[Computer Software] \\url{https://doi.org/10.11578/dc.20240530.1}},\n year = {2024},\n month = {may}\n}\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "IPyWidget wrappers to support rendering widgets on top of other widgets",
"version": "0.1.0",
"project_urls": {
"Documentation": "https://ornl.github.io/ipyoverlay/latest/index.html",
"Homepage": "https://github.com/ORNL/ipyoverlay"
},
"split_keywords": [
"widget",
" details-on-demand",
" overlay",
" ipywidget",
" jupyter"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "90b87050a2c45aa97f206a8334d8e928bfb09bbd540ac5e42e1d91b88e24101a",
"md5": "92989177b37a092b8ce86fe64b28d830",
"sha256": "6e85457e00deff33bfb87e8048f74c3cc82e35a902d1c461cd3b1ec126ff79a7"
},
"downloads": -1,
"filename": "ipyoverlay-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "92989177b37a092b8ce86fe64b28d830",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 30328,
"upload_time": "2024-06-27T14:49:09",
"upload_time_iso_8601": "2024-06-27T14:49:09.806179Z",
"url": "https://files.pythonhosted.org/packages/90/b8/7050a2c45aa97f206a8334d8e928bfb09bbd540ac5e42e1d91b88e24101a/ipyoverlay-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a06dc5e6ee1e00f44bf753b57d5135057d310f920d64f6767ffaf8700d65ec99",
"md5": "0596428faffe5608a06e774a4e23e618",
"sha256": "2d4d8ffafd4a57982040aaefa96da8a4cd991a2a4028e6ea0f30a1007c1cf215"
},
"downloads": -1,
"filename": "ipyoverlay-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "0596428faffe5608a06e774a4e23e618",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 28167,
"upload_time": "2024-06-27T14:49:11",
"upload_time_iso_8601": "2024-06-27T14:49:11.414472Z",
"url": "https://files.pythonhosted.org/packages/a0/6d/c5e6ee1e00f44bf753b57d5135057d310f920d64f6767ffaf8700d65ec99/ipyoverlay-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-27 14:49:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ORNL",
"github_project": "ipyoverlay",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "matplotlib",
"specs": []
},
{
"name": "ipyvuetify",
"specs": []
},
{
"name": "ipywidgets",
"specs": []
},
{
"name": "plotly",
"specs": []
},
{
"name": "pytest",
"specs": []
},
{
"name": "black",
"specs": []
},
{
"name": "flake8",
"specs": []
},
{
"name": "isort",
"specs": []
},
{
"name": "pre-commit",
"specs": []
},
{
"name": "pylint",
"specs": []
},
{
"name": "build",
"specs": []
},
{
"name": "twine",
"specs": []
}
],
"lcname": "ipyoverlay"
}