:bowtie: Create a dashboard with python!

Overview

Installation | Documentation | Gitter Chat | Google Group

Bowtie

Build Status Documentation Status PyPI version Conda version PyPI codecov prettier

Bowtie Demo

Introduction

Bowtie is a library for writing dashboards in Python. No need to know web frameworks or JavaScript, focus on building functionality in Python. Interactively explore your data in new ways! Deploy and share with others!

Demo

See a live example generated from this code!

Gallery

For more examples, check out the gallery and repos. Feel free to add your own creations!

Installation

If you use conda, you can install with:

conda install -c conda-forge bowtie-py

If you use pip, you can install with:

pip install bowtie

Requirements

Bowtie uses Yarn to manage node packages. If you installed Bowtie through conda, Yarn was also installed as a dependency. Yarn can be installed through conda:

conda install -c conda-forge yarn

Otherwise follow install instructions for Yarn for your OS.

Documentation

Available here.

Jupyter Integration

An early integration with Jupyter has been prototyped. I encourage you to try it out and share feedback. I hope this will make it easier to make Bowtie apps.

Read the documentation for more details.

Docker

Docker images are provided as an alternative way to use Bowtie. They are available on Docker Hub:

docker pull jwkvam/bowtie

Read the documentation for more details.

The Goal

@astrobiased @treycausey @vagabondjack the lack of a comprehensive production-grade Shiny-alike for Python is a Big Problem

Contributing

You can help Bowtie in many ways including:

  • Try it out and report bugs or what was difficult.
  • Help improve the documentation.
  • Write new widgets.
  • Provide hosting for apps in the gallery.
  • Say thanks!

coffee

Comments
  • Error with cache.load

    Error with cache.load

    I'm getting an error when I use bowtie.cache.load. As far as I can tell, the correct value is loading and everything functions normally. I'm not sure where this error comes from. I'm also using Schedule, but I managed to get that to work fine when not loading from the cache.

    As I make more changes, I may be able to give more details about this.

      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/greenthread.py", line 218, in main
        result = function(*args, **kwargs)
      File "./build/src/server.py", line 59, in foo
        func()
      File "/Users/rsm5139/Git/learning-bowtie/step_1.py", line 23, in timed_event
        ticker = cache.load('scheduled')
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/bowtie/cache.py", line 58, in load
        return msgpack.unpackb(bytes(event.get(timeout=10)), encoding='utf8')
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/queue.py", line 313, in get
        return waiter.wait()
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/queue.py", line 141, in wait
        return get_hub().switch()
      File "/Users/rsm5139/anaconda3/envs/learning-bowtie/lib/python3.6/site-packages/eventlet/hubs/hub.py", line 295, in switch
        return self.greenlet.switch()
    queue.Empty
    ^Cwsgi exiting
    
    opened by rsm5139 8
  • What can Schedule do?

    What can Schedule do?

    Hi, I'm trying to use Schedule, but it doesn't seem to do anything. I had it call a function to create a plot, but that didn't work. Then I tried having it just print('hello'), but still nothing. I would like to add a timer to the app and I figured Schedule would help, but maybe not.

    bug work-around 
    opened by rsm5139 5
  • ImportError: No module named html

    ImportError: No module named html

    I'm stuck trying to run the example code: https://github.com/jwkvam/bowtie-demo/blob/master/example.py

    I believe I have all dependencies installed via conda and pip (plotlywrapper), and I've tried running it in several environments and consoles.

    #!/usr/bin/env python ... # -- coding: utf-8 -- ... ... from bowtie import App, command ... from bowtie.control import Dropdown, Slider ... from bowtie.visual import Plotly, Table ... from bowtie.html import Markdown ... ... import numpy as np ... import pandas as pd ... import plotlywrapper as pw ... ... from sklearn.kernel_ridge import KernelRidge ... ... iris = pd.read_csv('./iris.csv') ... iris = iris.drop(iris.columns[0], axis=1) ... ... attrs = iris.columns[:-1] ... ... description = Markdown("""Bowtie Demo ... =========== ... ... Demonstrates interactive elements with the iris dataset. ... Select some attributes to plot and select some data on the 2d plot. ... Change the alpha parameter to see how that affects the model. ... """) ... ... xdown = Dropdown(caption='X variable', labels=attrs, values=attrs) ... ydown = Dropdown(caption='Y variable', labels=attrs, values=attrs) ... zdown = Dropdown(caption='Z variable', labels=attrs, values=attrs) ... alphaslider = Slider(caption='alpha parameter', start=10, minimum=1, maximum=50) ... ... mainplot = Plotly() ... mplot3 = Plotly() ... linear = Plotly() ... table1 = Table() ... ... ... def pairplot(x, y): ... print('hellox') ... if x is None or y is None: ... return ... x = x['value'] ... y = y['value'] ... plot = pw.Chart() ... for i, df in iris.groupby('Species'): ... plot += pw.scatter(df[x], df[y], label=i) ... plot.xlabel(x) ... plot.ylabel(y) ... mainplot.do_all(plot.to_json()) ... ... ... def threeplot(x, y, z): ... if x is None or y is None or z is None: ... return ... x = x['value'] ... y = y['value'] ... z = z['value'] ... plot = pw.Chart() ... for i, df in iris.groupby('Species'): ... plot += pw.scatter3d(df[x], df[y], df[z], label=i) ... plot.xlabel(x) ... plot.ylabel(y) ... plot.zlabel(z) ... mplot3.do_all(plot.to_json()) ... ... ... def mainregress(selection, alpha): ... if len(selection) < 2: ... return ... ... x = xdown.get()['value'] ... y = ydown.get()['value'] ... ... tabdata = [] ... mldatax = [] ... mldatay = [] ... species = iris.Species.unique() ... for i, p in enumerate(selection['points']): ... mldatax.append(p['x']) ... mldatay.append(p['y']) ... tabdata.append({ ... x: p['x'], ... y: p['y'], ... 'species': species[p['curve']] ... }) ... ... ... X = np.c_[mldatax, np.array(mldatax) ** 2] ... ridge = KernelRidge(alpha=alpha).fit(X, mldatay) ... ... xspace = np.linspace(min(mldatax)-1, max(mldatax)+1, 100) ... ... plot = pw.scatter(mldatax, mldatay, label='train', markersize=15) ... for i, df in iris.groupby('Species'): ... plot += pw.scatter(df[x], df[y], label=i) ... plot += pw.line(xspace, ridge.predict(np.c_[xspace, xspace**2]), label='model', mode='lines') ... plot.xlabel(x) ... plot.ylabel(y) ... linear.do_all(plot.to_json()) ... table1.do_data(pd.DataFrame(tabdata)) ... ... ... @command ... def main(): ... app = App(rows=2, columns=3, background_color='PaleTurquoise', debug=False) ... app.columns[0].fraction(2) ... app.columns[1].fraction(1) ... app.columns[2].fraction(1) ... ... app.add_sidebar(description) ... app.add_sidebar(xdown) ... app.add_sidebar(ydown) ... app.add_sidebar(zdown) ... app.add_sidebar(alphaslider) ... ... app[0, 0] = mainplot ... app[0, 1:] = mplot3 ... app[1, :2] = linear ... app[1, 2] = table1 ... ... app.subscribe(pairplot, xdown.on_change, ydown.on_change) ... app.subscribe(threeplot, xdown.on_change, ydown.on_change, zdown.on_change) ... app.subscribe(mainregress, mainplot.on_select, alphaslider.on_change) ... ... return app ... ImportError: No module named html ImportErrorTraceback (most recent call last) in () 5 from bowtie.control import Dropdown, Slider 6 from bowtie.visual import Plotly, Table ----> 7 from bowtie.html import Markdown 8 9 import numpy as np ImportError: No module named html

    opened by willupowers 3
  • make widgets with minimum size?

    make widgets with minimum size?

    I'm working on a dashboard where i'd like to stack 3 widgets, but on my screen they render with very small heights... is there a way to forece them to occupy a minimum height?

    image

    opened by dswah 3
  • ERROR in ./src/app/nouislider.jsx

    ERROR in ./src/app/nouislider.jsx

    ERROR in ./src/app/nouislider.jsx Module not found: Error: Cannot resolve module 'nouislider/src/nouislider.css' in /Users/wesselhuising/Documents/triplea/bowtie/test/build/src/app @ ./src/app/nouislider.jsx 15:0-40

    Using a virtualenv, followed the documentation about installing and setting up a bowtie app. Tried a lot, but can't figure out how to make the npm use the compiler of less to create a css. This happens while building the example app in the quickstart of the documentation.

    Any thoughts?

    opened by wesselhuising 2
  • support for initial function

    support for initial function

    It would be handy to have a function that get's called on initial page load from the client. Here's a sketch of how this can work:

    1. Add an emit from index.jsx
    2. Add a handler template in server.py
    3. Add functionality to Layout class to call a python function on the initial signal.
    moderate 
    opened by jwkvam 2
  • WIP: serverless

    WIP: serverless

    Put server.py.j2 functions into App class.

    • [x] move all routes to App
    • [x] remove server.py.j2
    • [x] test notebook integration still works
    • [x] different endpoint for each route
    • [x] move authentication
    • [x] document authentication
    • [x] decorator for upload and load
    • [x] run layout at build
    • [x] test upload
    • [x] protect routes in serve
    • [x] ~document layout building function~
    • [x] test pager
    • [x] test init

    Fixes #234 #247

    reliability 
    opened by jwkvam 1
  • move example code towards convention of global app

    move example code towards convention of global app

    For dynamic layouts, the app will need to be global or at least the views will be. I would rather not confuse the matter and encourage the app to be global. As a side benefit, users can then use the listen decorator instead of the subscribe function which should be more readable. This may also allow us to be more compatible with Flask apps if someone wants to have a bowtie dashboard sitting with some other flask stuff.

    • [x] refactor example code
    • [x] refactor bowtie-demo
    • [x] move server.py.j2 functionality into app.py or wherever appropriate.
    enhancement user experience 
    opened by jwkvam 1
  • release v0.10

    release v0.10

    TODO

    • [x] remove captions from controllers
    • [x] ~~move markdown back to visual :/~~
    • [x] move react link to html
    • [x] ~~functional style for html widgets? (no events or commands)~~
    • [x] make it easy to create captions
    • [x] list of components for each cell
    • [ ] embed links in other html? children in div's?
    • [ ] put server.py template into bowtie proper
    • [ ] change convention to putting app as global variable

    Fixes #236

    opened by jwkvam 1
  • Proposing a PR to fix a few small typos

    Proposing a PR to fix a few small typos

    Issue Type

    [x] Bug (Typo)

    Steps to Replicate and Expected Behaviour

    • Examine bowtie/tests/test_components.py and observe instatiation, however expect to see instantiation.
    • Examine bowtie/tests/test_tags.py and observe instantation, however expect to see instantiation.

    Notes

    Semi-automated issue generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    To avoid wasting CI processing resources a branch with the fix has been prepared but a pull request has not yet been created. A pull request fixing the issue can be prepared from the link below, feel free to create it or request @timgates42 create the PR. Alternatively if the fix is undesired please close the issue with a small comment about the reasoning.

    https://github.com/timgates42/bowtie/pull/new/bugfix_typos

    Thanks.

    opened by timgates42 0
  • Error building with webpack

    Error building with webpack

    yarn install v1.22.4
    warning package.json: No license field
    warning No license field
    [1/4] Resolving packages...
    success Already up-to-date.
    Done in 0.45s.
    '.' is not recognized as an internal or external command,
    operable program or batch file.
    Traceback (most recent call last):
      File "example.py", line 126, in <module>
        def main():
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_command.py", line 103, in command
        sys.exit(cmd(arg))
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 782, in main
        rv = self.invoke(ctx)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\click\core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_command.py", line 61, in build
        app._build()
      File "C:\Users\sabar\.conda\envs\Drug_Analysis\lib\site-packages\bowtie\_app.py", line 949, in _build
        raise WebpackError('Error building with webpack')
    bowtie.exceptions.WebpackError: Error building with webpack
    
    opened by SabarishVT 0
  • Divs should be able to have children html components

    Divs should be able to have children html components

    Main use case is to have links in divs so the links can be embedded in text. Using links like this will help with single page apps with multiple views.

    enhancement user experience 
    opened by jwkvam 0
  • improve margins look and feel and API

    improve margins look and feel and API

    By default there is 0 border around the edge of the screen. This is visually unattractive and there is no way to change it with the bowtie API. This is to note that this can and should be improved.

    Thoughts:

    1. Should this be combined with the row/column gaps?
    2. Take inspiration from other APIs, such as matplotlib's margins?
    enhancement user experience 
    opened by jwkvam 0
  • test restoring state for all components

    test restoring state for all components

    not sure how easy this will be, but it will add assurance that refreshing hopefully works or at the very least doesn't break the app.

    Basic test structure:

    1. Build app
    2. Use selenium to interact with widget.
    3. Refresh web page
    4. Make sure the page loaded successfully.
    5. Extra credit: make sure the state is same as it was before refresh.

    widgets tested

    • [ ] dates
    • [ ] dropdown etc.
    reliability 
    opened by jwkvam 0
Releases(v0.11.0)
  • v0.11.0(Oct 13, 2018)

    Added

    • Start of Authentication API
    • Better interoperability with Flask
    • Views have a layout attribute that is run a build time, which can save time at serve time.

    Breaking

    • Apps layout now happens in global state or in layout functions.
    • Remove server.py and templates, bundle.js{,.gz} is placed directly in build directory.
    • load and subscribe are decorators now, simplifying usage.
    • Sidebar now defaults to False.
    • Removed respond function, moved feature to subscribe.
    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Oct 4, 2018)

  • v0.10.0(Oct 3, 2018)

    Added

    • Mostly internal changes so that dynamic layout can be supported.
    • Dropped Python 3.5 compatibility.
    • Added Python 3.7 support. (#233)
    • Update random walk so it can be used with multiple users. (#126)
    • Views now have a border attribute for specifying a margin around the whole page, defaults to 7 pixels.
    • Add multiple components to a cell or span, for example:

      app = App() app[0, 0] = button app[0, 0] += button2 Or app = App() app[0, 0] = button, button2

    • Moved link component from control to html module

    Fixed

    • Bug with rebuilding apps due to caching problems.
    • Bug when refreshing apps with date pickers, the stored state wasn't being restored correctly.

    Breaking

    • Captions in controllers have been removed, they can be replaced with HTML components.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Mar 3, 2018)

    Added

    • Upgraded to webpack 4, users shouldn't see much of a difference other than slightly improved build times.

    Fixed

    • Readthedocs wasn't rendering due to type hints, fixed with conda.
    Source code(tar.gz)
    Source code(zip)
  • v0.9.0(Feb 23, 2018)

    Added

    • Jupyter integration.
    • Basic HTML components: Div and H1-H6.
    • Add multiple components into a single span/cell. This can be useful for adding multiple control or html elements into a single cell.

    Breaking

    • Drop support for Python 2.
    • Moved Markdown widget to HTML components.
    Source code(tar.gz)
    Source code(zip)
  • v0.8.1(Feb 11, 2018)

  • v0.8.0(Feb 10, 2018)

    Added

    • Improved widget handling, now use a dict to store components instead of parsing code. Makes it possible to subscribe to events with expressions for the component.
    • Cache behaves like dict, e.g. cache['data'] = [1, 2, 3].
    • Support Ant theme to customize all Ant components, added in the App class.
    • Vertical option for slider. (#204)
    • Document run command.
    • Document exceptions.

    Breaking

    • Removed cache save and load functions in favor of dict functionality.
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Feb 4, 2018)

    Added

    • Implemented __getitem__ for the layout enabling for example: app[1, 0:2] = widget.
    • Added "on_relayout" event for Plotly widgets.
    • Serialize Pandas series objects and Pandas datetime objects.

    Breaking

    • row_end and column_end are now exclusive instead of inclusive.
    • Simplified the add function in favor of the new getitem functionality, which is easier to use and familiar to Python programmers.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Feb 2, 2018)

    Added

    • Docstring examples of sizing components.
    • More checks to ensure adding components works as expected.

    Fixed

    • Bug which incorrectly tracked which parts of the grid were occupied by widgets.
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Feb 1, 2018)

    Added

    • Removed node and webpack dependencies, the only dependency is yarn.
    • Added a run command that simply combines build and serve together.
    • Smarter build process that saves time on subsequent builds.
    • Handle scheduled tasks when running with debug=True (#185)
    • Improve the Docker experience and docs.
    • Always use the latest compiled bundle.

    Breaking

    • Instead of building the app by running app.build() you simply return the App instance. See the quick start guide for an example.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Dec 31, 2017)

    Added

    • Expose root View attributes as App attributes (#175). You can access columns and rows from the App instance like pre v0.5.
    • Added column and row gap which inserts space between rows and columns. Accessible through column_gap and row_gap on View and App instances.
    • Added Gitter chat (#179)
    • Many documentation improvements.
    • Drop Python 3.4 support following pandas lead.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Nov 20, 2017)

    Added

    • Create multiple views to create subpages (#158)
    • Cache is now backed by session storage (#160)
    • Link component for switching views without a page reload

    Breaking

    • Renamed Layout class to App
    Source code(tar.gz)
    Source code(zip)
  • v0.4.2(Sep 5, 2017)

  • v0.4.1(Jul 30, 2017)

    Added

    • Upload widget
    • Dockerfile for building apps

    Fixed

    • Refactored the data Plotly sends on selection to stop crashes, may break some apps
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jun 17, 2017)

  • v0.3.3(Jun 14, 2017)

    Added

    • new textbox feature to update text (#128)

    Fixed

    • fixed issue preventing controllers from added to layout (#128)
    • updated Layout docstring (#125)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Apr 27, 2017)

    Added

    • Support changing socket.io path for nginx (#118)
    • Pager: to request communication from the client (#122)

    Fixed

    • Nouislider
    • Random walk example
    • pydocstyle suggestions
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Apr 17, 2017)

  • v0.3.0(Apr 14, 2017)

    Added

    • New more flexible and powerful layout API.
    • Now using CSS Grid instead of Flexbox.
    • Sidebar is now optional.
    • Control widgets can be placed anywhere.

    Breaking

    • add_visual is now simply add
    • add_controller is now add_sidebar
    • DropDown is renamed to Dropdown
    Source code(tar.gz)
    Source code(zip)
  • v0.2.6(Mar 30, 2017)

  • v0.2.5(Mar 30, 2017)

  • v0.2.4(Mar 30, 2017)

  • v0.2.3(Mar 30, 2017)

  • v0.2.2(Mar 30, 2017)

  • v0.2.1(Mar 30, 2017)

  • v0.2.0(Mar 30, 2017)

Owner
Jacques Kvam
I like machine learning 🤖and building tools for machine learning🛠⚙️🔩 https://ghuser.io/jwkvam
Jacques Kvam
A simple Monte Carlo simulation using Python and matplotlib library

Monte Carlo python simulation Install linux dependencies sudo apt update sudo apt install build-essential \ software-properties-commo

Samuel Terra 2 Dec 13, 2021
Jupyter notebook and datasets from the pandas Q&A video series

Python pandas Q&A video series Read about the series, and view all of the videos on one page: Easier data analysis in Python with pandas. Jupyter Note

Kevin Markham 2k Jan 05, 2023
demir.ai Dataset Operations

demir.ai Dataset Operations With this application, you can have the empty values (nan/null) deleted or filled before giving your dataset to machine le

Ahmet Furkan DEMIR 8 Nov 01, 2022
Data Visualizer Web-Application

Viz-It Data Visualizer Web-Application If I ask you where most of the data wrangler looses their time ? It is Data Overview and EDA. Presenting "Viz-I

Sagnik Roy 17 Nov 20, 2022
ecoglib: visualization and statistics for high density microecog signals

ecoglib: visualization and statistics for high density microecog signals This library contains high-level analysis tools for "topos" and "chronos" asp

1 Nov 17, 2021
Generating interfaces(CLI, Qt GUI, Dash web app) from a Python function.

oneFace is a Python library for automatically generating multiple interfaces(CLI, GUI, WebGUI) from a callable Python object. oneFace is an easy way t

NaNg 31 Oct 21, 2022
Statistics and Visualization of acceptance rate, main keyword of CVPR 2021 accepted papers for the main Computer Vision conference (CVPR)

Statistics and Visualization of acceptance rate, main keyword of CVPR 2021 accepted papers for the main Computer Vision conference (CVPR)

Hoseong Lee 78 Aug 23, 2022
Bokeh Plotting Backend for Pandas and GeoPandas

Pandas-Bokeh provides a Bokeh plotting backend for Pandas, GeoPandas and Pyspark DataFrames, similar to the already existing Visualization feature of

Patrik Hlobil 822 Jan 07, 2023
649 Pokémon palettes as CSVs, with a Python lib to turn names/IDs into palettes, or MatPlotLib compatible ListedColormaps.

PokePalette 649 Pokémon, broken down into CSVs of their RGB colour palettes. Complete with a Python library to convert names or Pokédex IDs into eithe

11 Dec 05, 2022
This project is created to visualize the system statistics such as memory usage, CPU usage, memory accessible by process and much more using Kibana Dashboard with Elasticsearch.

System Stats Visualizer This project is created to visualize the system statistics such as memory usage, CPU usage, memory accessible by process and m

Vishal Teotia 5 Feb 06, 2022
Manim is an animation engine for explanatory math videos.

A community-maintained Python framework for creating mathematical animations.

12.4k Dec 30, 2022
A small timeseries transformation API built on Flask and Pandas

#Mcflyin ###A timeseries transformation API built on Pandas and Flask This is a small demo of an API to do timeseries transformations built on Flask a

Rob Story 84 Mar 25, 2022
Comparing USD and GBP Exchange Rates

Currency Data Visualization Comparing USD and GBP Exchange Rates This is a bar graph comparing GBP and USD exchange rates. I chose blue for the UK bec

5 Oct 28, 2021
Python module for drawing and rendering beautiful atoms and molecules using Blender.

Batoms is a Python package for editing and rendering atoms and molecules objects using blender. A Python interface that allows for automating workflows.

Xing Wang 1 Jul 06, 2022
🐞 📊 Ladybug extension to generate 2D charts

ladybug-charts Ladybug extension to generate 2D charts. Installation pip install ladybug-charts QuickStart import ladybug_charts API Documentation Loc

Ladybug Tools 3 Dec 30, 2022
D-Analyst : High Performance Visualization Tool

D-Analyst : High Performance Visualization Tool D-Analyst is a high performance data visualization built with python and based on OpenGL. It allows to

4 Apr 14, 2022
Generate a roam research like Network Graph view from your Notion pages.

Notion Graph View Export Notion pages to a Roam Research like graph view.

Steve Sun 214 Jan 07, 2023
Data Visualization Guide for Presentations, Reports, and Dashboards

This is a highly practical and example-based guide on visually representing data in reports and dashboards.

Anton Zhiyanov 395 Dec 29, 2022
Uniform Manifold Approximation and Projection

UMAP Uniform Manifold Approximation and Projection (UMAP) is a dimension reduction technique that can be used for visualisation similarly to t-SNE, bu

Leland McInnes 6k Jan 08, 2023
Some useful extensions for Matplotlib.

mplx Some useful extensions for Matplotlib. Contour plots for functions with discontinuities plt.contour mplx.contour(max_jump=1.0) Matplotlib has pro

Nico Schlömer 519 Dec 30, 2022