{"id":25705433,"url":"https://github.com/mmore500/outset","last_synced_at":"2025-04-30T10:13:19.489Z","repository":{"id":211531955,"uuid":"729401509","full_name":"mmore500/outset","owner":"mmore500","description":"add zoom indicators, insets, and magnified panels to matplotlib/seaborn visualizations with ease!","archived":false,"fork":false,"pushed_at":"2024-06-08T22:57:43.000Z","size":6416,"stargazers_count":8,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-30T10:13:13.221Z","etag":null,"topics":["data-science","data-visualization","matplotlib","pypi-package","python","seaborn"],"latest_commit_sha":null,"homepage":"http://mmore500.com/outset/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmore500.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"docs/contributing.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-09T05:36:53.000Z","updated_at":"2025-03-25T13:26:30.000Z","dependencies_parsed_at":"2024-06-09T00:10:57.452Z","dependency_job_id":"63c55817-6ec6-4343-bdbd-dfed0607f484","html_url":"https://github.com/mmore500/outset","commit_stats":null,"previous_names":["mmore500/outset"],"tags_count":10,"template":false,"template_full_name":"microsoft/python-package-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmore500%2Foutset","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmore500%2Foutset/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmore500%2Foutset/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmore500%2Foutset/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmore500","download_url":"https://codeload.github.com/mmore500/outset/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251683356,"owners_count":21626953,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-science","data-visualization","matplotlib","pypi-package","python","seaborn"],"created_at":"2025-02-25T06:47:42.100Z","updated_at":"2025-04-30T10:13:19.460Z","avatar_url":"https://github.com/mmore500.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":".. figure:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/outset-wordmark.png\n   :target: https://github.com/mmore500/outset\n   :alt: outset wordmark\n\n|PyPi| |docs| |GitHub stars| |CI| |Deploy Sphinx documentation to Pages| |zenodo|\n\nadd zoom indicators, insets, and magnified panels to matplotlib/seaborn visualizations with ease!\n\n- Free software: MIT license\n- Documentation: https://mmore500.com/outset\n- Repository: https://github.com/mmore500/outset\n\n\nFeatures\n--------\n\n* compose axes grids to juxtapose a complete plot with data subsets or magnified subregions\n* render grid axes as overlaid insets\n* draw elegant zoom indicators with publication-ready default styling\n* enjoy a familiar, data-oriented interface --- with full feature sets inherited directly from seaborn\n* abstract away handling of padding and aspect ratios\n* fine-tune appearance and layout with extensive styling options and bundled numbering/symbol library\n* use hooks to inject custom functionality, like numbering/symbols and layout tweaks\n\nInstall\n-------\n\n``python3 -m pip install outset``\n\n\nGallery\n-------\n\n   .. figure:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/outset-gallery-collage.png\n      :target: https://mmore500.com/outset/gallery.html\n      :alt: outset gallery collage\n\n\n*Find example code and visualizations* |gallery|_.\n\n.. _gallery: https://mmore500.com/outset/gallery.html\n\n.. |gallery| replace:: *here*\n\nBasic Usage\n-----------\n\nUse ``outset.OutsetGrid`` to compose source plot with zoom panels on an axes grid.\nZoom sections can be *a)* designated manually or *b)* inferred to bound data subsets.\nTo overlay zoom panels onto source plot, *c)* call ``outset.inset_outsets``.\n\na) Create ``OutsetGrid``, Explicit Zoom Areas\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n   .. code:: python\n\n      from matplotlib import pyplot as plt\n      import numpy as np\n      import outset as otst\n      import seaborn as sns\n      # adapted from # https://matplotlib.org/stable/gallery/\n      i, a, b, c, d = np.arange(0.0, 2*np.pi, 0.01), 1, 7, 3, 11\n\n      # 3 axes grid: source plot and two zoom frames\n      grid = otst.OutsetGrid([(-10, 8, -8, 12), (-5, 5, -1, 3)])  # frame coords\n      grid.broadcast(plt.plot,  # run plotter over all axes\n         np.sin(i*a)*np.cos(i*b) * 20, np.sin(i*c)*np.cos(i*d) * 20,  # line coords\n         c=\"k\", zorder=-1)  # kwargs forwarded to plt.plot\n\n      grid.marqueeplot()  # set axlims and render marquee annotations\n\n   ..\n\n   .. figure:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/usage1.png\n      :alt: usage example 1 result\n\nb) Create ``OutsetGrid``, Inferred Zoom Areas\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n   .. code:: python\n\n      grid = otst.OutsetGrid(data=sns.load_dataset(\"iris\").dropna(),  # facet over axes grid\n         x=\"petal_width\", y=\"petal_length\",\n         col=\"species\",  # create zoom panel for each species\n         hue=\"species\",  # color marquee annotations by species\n         aspect=0.6, height=3)  # adjust axes grid geometry\n      grid.map_dataframe(sns.scatterplot,  # map plotter over faceted data\n         x=\"petal_width\", y=\"petal_length\", legend=False, zorder=0)\n\n      grid.marqueeplot()   # set axlims and render marquee annotations\n      grid.add_legend()  # add figure-level legend\n\n   ..\n\n   .. figure:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/usage2.png\n      :alt: usage example 2 result\n\n\nc) Overlay Zoom Panels as Insets\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n   .. code-block:: python\n\n      grid = otst.OutsetGrid(data=sns.load_dataset(\"iris\").dropna(),  # facet over axes grid\n         x=\"petal_width\", y=\"petal_length\",\n         col=\"species\",  # put each species in its own outset\n         hue=\"species\",   # make different color marquees\n         aspect=1.5, height=4)  # adjust axes grid geometry\n      grid.map_dataframe(sns.scatterplot,  # map plotter over faceted data\n         x=\"petal_width\", y=\"petal_length\", legend=False, zorder=0)\n\n      grid.add_legend()  # add figure-level legend\n      otst.inset_outsets(grid, insets=\"NW\")  # inset outsets in upper-left corner\n      grid.marqueeplot()  # set axlims and render marquee annotations\n\n   ..\n\n   .. figure:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/usage3.png\n      :alt: usage example 3 result\n\n*See the* |quickstart|_ *for more detailed usage information.*\n\n.. _quickstart: https://mmore500.com/outset/quickstart.html\n\n.. |quickstart| replace:: *quickstart guide*\n\n\nAPI Overview\n------------\n\n* |OutsetGrid|_: compose a source plot and zoom regions over it (e.g., \"outsets\") on a multiplot lattice\n\n  * designate zoom regions directly, or as regions containing data subsets\n  * object-oriented, \"tidy data\" interface a la ``seaborn.FacetGrid``\n\n* |inset_outsets|_: rearrange an ``OutsetGrid`` to place outset zoom regions as insets over the original source axes\n\n* |marqueeplot|_: axis-level \"tidy data\" interface to draw marquees framing specified subsets of data\n\n* |draw_marquee|_: low-level interface to draw individual marquee annotations\n\n\n.. |OutsetGrid| replace:: ``outset.OutsetGrid``\n.. _OutsetGrid: https://mmore500.com/outset/_autosummary/outset.OutsetGrid.html\n\n.. |inset_outsets| replace:: ``outset.inset_outsets``\n.. _inset_outsets: https://mmore500.com/outset/_autosummary/outset.inset_outsets.html\n\n.. |marqueeplot| replace:: ``outset.marqueeplot``\n.. _marqueeplot: https://mmore500.com/outset/_autosummary/outset.marqueeplot.html\n\n.. |draw_marquee| replace:: ``outset.draw_marquee``\n.. _draw_marquee: https://mmore500.com/outset/_autosummary/outset.draw_marquee.html\n\n\n*Read the full API documentation* |apidocs|_.\n\n.. _apidocs: https://mmore500.com/outset/_autosummary/outset.html#module-outset\n\n.. |apidocs| replace:: *here*\n\nAvailable Styling Extensions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Callout mark glyphs:* customize marquee identifiers; pass as ``mark_glyph`` kwarg\n\n   |MarkAlphabeticalBadges|_ | |MarkArrow|_ | |MarkInlaidAsterisk|_ | |MarkMagnifyingGlass|_ | |MarkRomanBadges|_\n\n   .. image:: https://raw.githubusercontent.com/mmore500/outset/481089653d858f14e636c3757df4927783bd5d23/docs/assets/callout-mark-glyphs.png\n      :alt: comparison of available glyphs\n\n   *These mark glyphs can also be used directly, independently of the rest of the library!*\n\n.. |MarkAlphabeticalBadges| replace:: ``outset.mark.MarkAlphabeticalBadges``\n.. _MarkAlphabeticalBadges: https://mmore500.com/outset/_autosummary/outset.mark.MarkAlphabeticalBadges.html\n\n.. |MarkArrow| replace:: ``outset.mark.MarkArrow``\n.. _MarkArrow: https://mmore500.com/outset/_autosummary/outset.mark.MarkArrow.html\n\n.. |MarkInlaidAsterisk| replace:: ``outset.mark.MarkInlaidAsterisk``\n.. _MarkInlaidAsterisk: https://mmore500.com/outset/_autosummary/outset.mark.MarkInlaidAsterisk.html\n\n.. |MarkMagnifyingGlass| replace:: ``outset.mark.MarkMagnifyingGlass``\n.. _MarkMagnifyingGlass: https://mmore500.com/outset/_autosummary/outset.mark.MarkMagnifyingGlass.html\n\n.. |MarkRomanBadges| replace:: ``outset.mark.MarkRomanBadges``\n.. _MarkRomanBadges: https://mmore500.com/outset/_autosummary/outset.mark.MarkRomanBadges.html\n\n*Callout tweaks:* customize how marquee callouts are shaped and positioned; pass as ``leader_tweak`` kwarg\n\n   * |TweakReflect|_: flip callouts left-right/up-down\n   * |TweakSpreadArea|_: spread callout glyphs apart to resolve overlaps\n\n.. |TweakReflect| replace:: ``outset.mark.TweakReflect``\n.. _TweakReflect: https://mmore500.com/outset/_autosummary/outset.tweak.TweakReflect.html\n\n.. |TweakSpreadArea| replace:: ``outset.mark.TweakSpreadArea``\n.. _TweakSpreadArea: https://mmore500.com/outset/_autosummary/outset.tweak.TweakSpreadArea.html\n\n\nCiting\n------\n\nIf outset is used in a scholarly work, please cite it as\n\n    Matthew Andres Moreno. (2023). mmore500/outset. Zenodo. https://doi.org/10.5281/zenodo.10426106\n\n.. code:: bibtex\n\n    @software{moreno2023outset,\n      author = {Matthew Andres Moreno},\n      title = {mmore500/outset},\n      month = dec,\n      year = 2023,\n      publisher = {Zenodo},\n      doi = {10.5281/zenodo.10426106},\n      url = {https://doi.org/10.5281/zenodo.10426106}\n    }\n\nConsider also citing `matplotlib \u003chttps://matplotlib.org/stable/users/project/citing.html\u003e`__ and `seaborn \u003chttps://seaborn.pydata.org/citing.html\u003e`__ .\nAnd don't forget to leave a `star on GitHub \u003chttps://github.com/mmore500/outset/stargazers\u003e`__!\n\nContributing\n------------\n\nThis project welcomes contributions and suggestions.\nDocumentation includes `detailed information to get you started \u003chttps://mmore500.com/outset/contributing.html#\u003e`__.\n\n.. |PyPi| image:: https://img.shields.io/pypi/v/outset.svg\n   :target: https://pypi.python.org/pypi/outset\n.. |CI| image:: https://github.com/mmore500/outset/actions/workflows/CI.yml/badge.svg\n   :target: https://github.com/mmore500/outset/actions\n.. |Deploy Sphinx documentation to Pages| image:: https://github.com/mmore500/outset/actions/workflows/sphinx.yml/badge.svg\n   :target: https://github.com/mmore500/outset/actions/workflows/sphinx.yml\n.. |GitHub stars| image:: https://img.shields.io/github/stars/mmore500/outset.svg?style=round-square\u0026logo=github\u0026label=Stars\u0026logoColor=white\n   :target: https://github.com/mmore500/outset\n.. |zenodo| image:: https://zenodo.org/badge/729401509.svg\n   :target: https://zenodo.org/doi/10.5281/zenodo.10426106\n.. |docs| image:: https://img.shields.io/badge/pages%20-%20docs%20-%20fedcba?logo=github\n   :target: https://mmore500.com/outset\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmore500%2Foutset","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmore500%2Foutset","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmore500%2Foutset/lists"}