Fast data visualization and GUI tools for scientific / engineering applications

Overview

PyQtGraph

PyPi conda-forge Build Status CodeQL Status Documentation Status Total alerts Language grade: Python

A pure-Python graphics library for PyQt5/PyQt6/PySide2/PySide6

Copyright 2020 Luke Campagnola, University of North Carolina at Chapel Hill

http://www.pyqtgraph.org

PyQtGraph is intended for use in mathematics / scientific / engineering applications. Despite being written entirely in python, the library is fast due to its heavy leverage of numpy for number crunching, Qt's GraphicsView framework for 2D display, and OpenGL for 3D display.

Requirements

pyqtgraph has adopted NEP 29.

This project supports:

  • All minor versions of Python released 42 months prior to the project, and at minimum the two latest minor versions.
  • All minor versions of numpy released in the 24 months prior to the project, and at minimum the last three minor versions.
  • All minor versions of Qt 5 and Qt 6 currently supported by upstream Qt

Currently this means:

  • Python 3.7+
  • Qt 5.12-6.0
  • Required
    • PyQt5, PyQt6, PySide2 or PySide6
    • numpy 1.17+
  • Optional
    • scipy for image processing
    • pyopengl for 3D graphics
      • pyopengl on macOS Big Sur only works with python 3.9.1+
    • hdf5 for large hdf5 binary format support
    • colorcet for supplemental colormaps
    • cupy for CUDA-enhanced image processing
      • On Windows, CUDA toolkit must be >= 11.1

Qt Bindings Test Matrix

The following table represents the python environments we test in our CI system. Our CI system uses Ubuntu 20.04, Windows Server 2019, and macOS 10.15 base images.

Qt-Bindings Python 3.7 Python 3.8 Python 3.9
PySide2-5.12
PyQt5-5.12
PySide2-5.15
PyQt5-5.15
PySide6-6.0
PyQt6-6.0

Support

Installation Methods

  • From PyPI:
    • Last released version: pip install pyqtgraph
    • Latest development version: pip install git+https://github.com/pyqtgraph/[email protected]
  • From conda
    • Last released version: conda install -c conda-forge pyqtgraph
  • To install system-wide from source distribution: python setup.py install
  • Many linux package repositories have release versions.
  • To use with a specific project, simply copy the pyqtgraph subdirectory anywhere that is importable from your project.

Documentation

The official documentation lives at pyqtgraph.readthedocs.io

The easiest way to learn pyqtgraph is to browse through the examples; run python -m pyqtgraph.examples to launch the examples application.

Comments
  • If arrayToQPath uses connect=all, use a different construction for QPainterPath

    If arrayToQPath uses connect=all, use a different construction for QPainterPath

    It's been discussed that the QDataStream >> QPainterPath operationis a real bottle-neck in arrayToQPath. Here is a stack overflow post that points out that QDataStream >> QPainterPath operation is really slow.

    Taking a peak at what PythonQwt does, that project constructs an open QPolygonF and draw that. QPainterPath does have an addPolygon method, so we can generate a QPainterPath that is made up of a QPolygonF.

    Doing some testing on examples/MultiPlotSpeedTest.py shows a significant performance boost when doing this. This PR shows 35 fps while master branch is at 25 fps.

    This PR also incorporates a second optimization, it checks for NaN values on PlotCurveItem.updateData() instead of at arrayToQPath check, and allows for an optimization parameter to be passed to skip the NaN check which does cause a performance hit.

    So first thing, the function is largely lifted from PythonQwt, so huge thanks to that project for figuring out this optimization.

    ~Some caveats, this does not work w/ Qt6; so definitely not ready for merging.~ Works with Qt6 now.

    EDIT: on second thought, this NaN check might not be buying us anything... doesn't look like arrayToQPath is called any more often than PlotCurveItem.updateData... so we're just moving the calculation from one part of the library to another...

    opened by j9ac9k 61
  • Added UML class diagram to give overview of the most important classes

    Added UML class diagram to give overview of the most important classes

    As discussed in issue #848, a UML diagram that gives an overview of the most important classes can really help with understanding the PyQtGraph library.

    I created a diagram in PlantUML, as suggested. I therefore made this PR so that people have can access to the source file. I think it would be a useful addition to the documentation but I don't know where (and how) to add it. For now I just added it to the doc folder as uml_overview.txt. Feel free move it of course.

    The result is as follows. I'm curious to hear your feedback.

    uml_overview 06-commit-865991f

    docs sprint 
    opened by titusjan 56
  • Optimize makeARGB for ubyte images

    Optimize makeARGB for ubyte images

    This PR optimizes the channel reordering portion of makeARGB by using the conversion routines of QImage.

    It only optimizes for row major ubyte images and defers to the original code for the rest. Improvement in fps is measurable with VideoSpeedTest

    Would such a PR that optimizes for specific data types be acceptable? Tagging @outofculture

    opened by pijyoi 56
  • Add support for Qt5

    Add support for Qt5

    Are there any plans to add support for PyQt5?

    I see you've got a nice wrapper around the Qt imports to support PySide/PyQt4. I had hoped that would mean a simple copy-pasta PyQt4 > PyQt5 but unfortunately you get hit with errors elsewhere (QApplication now being in QWidgets for example).

    I can have a go at creating a PyQt5 fork in a branch and see how much I have to mangle it before it works, but I wanted to check nobody else was doing this first.

    opened by mfitzp 49
  • Avoid using ``np.linalg.inv()`` for transform inversion

    Avoid using ``np.linalg.inv()`` for transform inversion

    This fixes not only latency but high CPU usage when inverting a Qt transform matrix.

    There is a known recent issue in numpy pertaining to this: numpy/numpy/issues/17166

    I've ripped off the "hard coded" solution from that issue verbatim and using it has reduced both latency and CPU usage in pretty much all mouse related interaction with ViewBox. I'm happy to write up profiling and test code for this in case there are any doubts.

    There are even faster solutions inside the referenced issue that might be worth exploring as well; I know we have to keep py2 in mind but it might be worth some flag logic in this case since invertQTransform() seems to be used throughout ViewBox and GraphicsItem. This would explain why I'm seeing improvements outside my original use case (calling GraphicsObject.mapFromView() on label coordinates fed from the mouse).

    I also would like to benchmark using *np.ravel() to pass the matrix results to QtGui.QTransform() since I've done that with good results in QPicture() drawings and it should in theory be faster then the existing multiple element access.

    Update

    Commit that changed away from using the internal transform is a41d330 Relevant Qt bug reports are:

    • https://bugreports.qt.io/browse/QTBUG-52070
    • https://bugreports.qt.io/browse/QTBUG-8014
    • https://bugreports.qt.io/browse/QTBUG-8557
    • troublesome underlying function is https://doc.qt.io/qt-5/qtglobal.html#qFuzzyIsNull
    opened by goodboy 46
  • Implemented pColorMeshItem

    Implemented pColorMeshItem

    As discussed in the issue #1262 I proposed here a minimal implementation of an item mimicking the pcolormesh function of matplotlib. As I didn't know what to do to make the pull request valid I decided to make it as minimal as possible. I am willing to integrate it more into pyqtgraph if someone gives me some directions. In particular a I think a kind of pColorMeshWidget with axis and Histogram would be an excellent end result of this work.

    Fixes #146 Fixes #1262

    opened by edumur 45
  • experimental line drawing mode for thick lines

    experimental line drawing mode for thick lines

    Proof of concept using drawLines code from PlotSpeedTest.py. Drawing thick lines probably involves a polygon flood fill by Qt, which gets slower the more complicated the polygon gets. So the idea here is to draw many many short line segments. This has its own overhead but is far less than before.

    To see it in action in PlotSpeedTest.py, ~~check enableExperimental,~~ set to line width more than 1 ~~and check skipFiniteCheck.~~

    ~~It's only meant to support fully finite data.~~

    I don't use thick lines myself, so feel free to take over this PR.

    opened by pijyoi 43
  • Scatter Plot Improvements

    Scatter Plot Improvements

    • Fixes various bugs and performance issues.
    • Adds a hovering API to ScatterPlotItem which lets the user specify a separate style for the hovered points and show a tool tip containing information about them. A signal is also emitted during hovering.
    opened by lidstrom83 40
  • plots not showing with NaN

    plots not showing with NaN

    Short description

    Plotting data with np.nan results in an empty plot.

    Code to reproduce

    import numpy as np
    import pyqtgraph as pg
    
    data = np.random.normal(size=1000)
    data2 = np.random.normal(size=1000)
    data2[0] = np.nan
    
    pg.plot(data, title="no NaN")
    pg.plot(data2, title="one NaN")
    
    pg.QtGui.QApplication.exec_()
    

    Expected behavior

    Two plots with random data.

    Real behavior

    First plot shows as normal. Second plot is empty.

    An error occurred?
    Post the full traceback inside these 'code fences'!
    

    Tested environment(s)

    • PyQtGraph version: 0.11.0.dev0+ged6586c

    • Qt Python binding: PySide2 5.13.1 Qt 5.13.1

    • Python version: 3.7.3

    • NumPy version: 1.17.2

    • Operating system: Windows 10, x64

    • Installation method: python from python.org installer. numpy from pip. pyqtgraph from git and / "python setup.py install" in pyqtgraph directory

    • PyQtGraph version: 0.11.0.dev0+ged6586c

    • Qt Python binding: PySide2 5.13.1 Qt 5.13.1

    • Python version: 3.7.3

    • NumPy version: 1.17.2

    • Operating system: Centos 7

    • Installation method: python built from source. numpy from pip. pyqtgraph from git and / "python setup.py install" in pyqtgraph directory

    Additional context

    bug 
    opened by summoningdark 37
  • Adding TextItem to plot changes the axis range (appears on Ver. 0.11, the bug was not present on 0.10)

    Adding TextItem to plot changes the axis range (appears on Ver. 0.11, the bug was not present on 0.10)

    Now that I am migrating to Version 0.11, I have noticed an annoying problem that was not present on 0.10.

    When I add ArrowItem and TextItem to an existing plot, I get this:

    Ticks_wrong

    Whereas I would expect this (pyqtgraph ver. 0.10):

    Ticks_right

    I noticed that this happens only if I label the peaks by calling:

        def label_peaks(self, plot_wg2, pos_peaks, GLS = True, o_c = False, activity = False, MLP = False, DFT=False):
    
            if GLS == True and DFT == False and self.avoid_GLS_RV_alias.isChecked():
                x_peaks = pos_peaks[0][pos_peaks[0]>1.2]
                y_peaks = pos_peaks[1][pos_peaks[0]>1.2]
            else:
                x_peaks = pos_peaks[0]
                y_peaks = pos_peaks[1]
    
    
            if GLS == True:
                N_peaks = int(self.N_GLS_peak_to_point.value())
                if o_c == True:
                    log = self.radioButton_RV_o_c_GLS_period.isChecked()
                elif activity == True:
                    log = self.radioButton_act_GLS_period.isChecked()
                elif MLP == True:
                    log = self.radioButton_RV_MLP_period.isChecked()
                    N_peaks = int(self.N_MLP_peak_to_point.value())
                elif DFT == True:
                    log = self.radioButton_RV_WF_period.isChecked()
                    N_peaks = int(self.N_window_peak_to_point.value())
    
                else:
                    log = self.radioButton_RV_GLS_period.isChecked()
    
                type_per = "GLS"
            else:
                N_peaks = int(self.N_TLS_peak_to_point.value())
                log = False
                type_per = "TLS"
    
            if len(x_peaks) <  N_peaks:
                N_peaks = len(x_peaks)
                print("You have reached the maximum number of %s peaks."%type_per)
    
            for i in range(N_peaks):
    
                text_arrow = pg.TextItem("", anchor=(0.5,1.9))
    
                if log == True:
                    arrow = pg.ArrowItem(pos=(np.log10(x_peaks[i]), y_peaks[i]), angle=270)
                    text_arrow.setText('%0.2f d' % (x_peaks[i]))
                    text_arrow.setPos(np.log10(x_peaks[i]),y_peaks[i])
                    
                elif log == False and GLS == True:   
                    arrow = pg.ArrowItem(pos=(1/x_peaks[i], y_peaks[i]), angle=270)
                    text_arrow.setText('%0.2f d' % (x_peaks[i]))
                    text_arrow.setPos(1/x_peaks[i],y_peaks[i])
                    
                elif log == False and GLS == False: 
                    arrow = pg.ArrowItem(pos=(x_peaks[i], y_peaks[i]), angle=270)
                    text_arrow.setText('%0.2f d' % (x_peaks[i]))
                    text_arrow.setPos(x_peaks[i],y_peaks[i])
    
    
                plot_wg2.addItem(arrow)
                plot_wg2.addItem(text_arrow) 
    
    

    The "bug" appears only if I use TextItem. Adding ArrowItem behaves OK. So what changed w.r.t. version 0.10?

    opened by 3fon3fonov 36
  • change GroupParameterItem palette to address issue in darkmode on mac

    change GroupParameterItem palette to address issue in darkmode on mac

    This partially addresses #1958

    These changes will still need to be tested on windows/Linux.

    Group title colors were changed to the color of QPalette.TextRole but it could easily be changed back to the original in dark mode.

    Light unknown-1 Dark unknown-2

    opened by Wubbzi 35
  • AxisItem-based grid item

    AxisItem-based grid item

    The idea is to display the grid lines in a GridItem and not extend the AxisItems ticks.

    This PR attempts to fix #1606, which reports that tick labels never seem to be displayed just right, when the grid is enabled.

    Although the current PR seems to accomplish this, I am not quite happy with the current implementation:

    • I had troubles replicating the way how AxisItem calculates tick positions inside a GridItem. Therefore I just added the AxisItem objects to the GridItem and get the positions by calling the appropriate methods. Not nice but it works.
    • With this PR, the GridItem has been improved so that it gets the right tick positions from the corresponding AxisItems. However, it needs to be clarified if this approach shall be adopted altogether by AxisItem, without the need for users to manually create a GridItem.

    Therefore, I marked it as draft. I am happy to receive/discuss ideas how the current approach can be improved.

    Recently, #2385 was introduced that circumvents this problem, by hiding tick labels, when overlap even slightly the axis boundaries. Thus, the changes of this PR are only relevant if the style option 'hideOverlappingLabels' of all AxisItems are set to False.

    I think it is useful, to have the possibility, to show tick labels at the plotted range start and/or end, when the tick label positions exactly match the start and/or end coordinate. Afaik matplotlib also does this.

    Example to compare the behavior before and after

    import pyqtgraph as pg
    #pg.setConfigOption('background', 'w')
    #pg.setConfigOption('foreground', 'k')
    pg.setConfigOptions(antialias=True)
    from pyqtgraph.Qt import QtWidgets
    import numpy as np
    
    win = pg.GraphicsLayoutWidget(show=True)
    win.resize(800,350)
    win.setWindowTitle('pyqtgraph example: random points')
    plt1 = win.addPlot()
    plt2 = win.addPlot()
    
    # preset mouse mode to 1 button for quick testing
    #plt1.getViewBox().setMouseMode(pg.ViewBox.RectMode)
    #plt2.getViewBox().setMouseMode(pg.ViewBox.RectMode)
    
    # create data
    x = np.arange(100)
    y = np.random.normal(size=100)
    
    for ax in ('left', 'right', 'top', 'bottom'):
        plt1.getAxis(ax).setStyle(hideOverlappingLabels=False)
        plt2.getAxis(ax).setStyle(hideOverlappingLabels=False)
    
    plt1.plot(x, y)
    plt2.plot(x, y)
    
    plt1.setXLink(plt2)
    plt1.setYLink(plt2)
    
    plt1.showAxis('right', show=True)
    plt2.showAxis('right', show=True)
    plt1.showAxis('top', show=True)
    plt2.showAxis('top', show=True)
    
    plt1.showGrid(x=True, y=True)
    
    grid = pg.GridItem()
    grid.setTextPen(None)
    grid.setTickSpacing(x=[None, None], y=[None, None])
    plt1.addItem(grid)
    
    plt2.showGrid(x=True, y=True)
    
    QtWidgets.QApplication.instance().exec_()
    
    opened by swvanbuuren 0
  • Adding project MiniPTI to README

    Adding project MiniPTI to README

    README.md

    I'm using PyQtGraph for my GUI in the project MiniPTI on GitHub (as part from the EU project Passepartout) and would like to add it to the list of "who uses the library".

    https://github.com/bilaljo/MiniPTI

    opened by bilaljo 1
  • Bump sphinx from 5.3.0 to 6.1.1 in /doc

    Bump sphinx from 5.3.0 to 6.1.1 in /doc

    Bumps sphinx from 5.3.0 to 6.1.1.

    Release notes

    Sourced from sphinx's releases.

    v6.1.1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.1.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b2

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    Changelog

    Sourced from sphinx's changelog.

    Release 6.1.1 (released Jan 05, 2023)

    Bugs fixed

    • #11091: Fix util.nodes.apply_source_workaround for literal_block nodes with no source information in the node or the node's parents.

    Release 6.1.0 (released Jan 05, 2023)

    Dependencies

    Incompatible changes

    • #10979: gettext: Removed support for pluralisation in get_translation. This was unused and complicated other changes to sphinx.locale.

    Deprecated

    • sphinx.util functions:

      • Renamed sphinx.util.typing.stringify() to sphinx.util.typing.stringify_annotation()
      • Moved sphinx.util.xmlname_checker() to sphinx.builders.epub3._XML_NAME_PATTERN

      Moved to sphinx.util.display:

      • sphinx.util.status_iterator
      • sphinx.util.display_chunk
      • sphinx.util.SkipProgressMessage
      • sphinx.util.progress_message

      Moved to sphinx.util.http_date:

      • sphinx.util.epoch_to_rfc1123
      • sphinx.util.rfc1123_to_epoch

      Moved to sphinx.util.exceptions:

      • sphinx.util.save_traceback

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 0
  • Extra ScatterPLot point on the GLViewWidget displays

    Extra ScatterPLot point on the GLViewWidget displays

    I wrote a simple app using PyQt5 and Pyqtgraph to visualize data in 3D plot. Main window consists of GLViewWidget and 3 buttons to control the simulation. Here is an example of the code I used to do it. In fact I tries to plot an animated point, which moves according to the data given.

    from PyQt5 import QtWidgets, QtGui, Qt, QtCore
    import pyqtgraph as pg
    import pyqtgraph.opengl as gl
    import sim_viewer
    import sys
    
    
    class SimulationWin(QtWidgets.QMainWindow, sim_viewer.Ui_MainWindow):
        def __init__(self, data):
            super().__init__()
            self.setupUi(self)
            self.data = data
            self.state = 0
            self.id = 0
    
            self.x_data = list(self.data["vehicle_local_position"]["x"])
            self.y_data = list(self.data["vehicle_local_position"]["y"])
            self.z_data = list(self.data["vehicle_local_position"]["z"])
    
            self.viewer = gl.GLViewWidget()
            self.viewer.clear()
            self.viewer.setWindowTitle('STL Viewer')
            self.viewer.setCameraPosition(distance=50)
    
            g = gl.GLGridItem()
            g.setSize(200, 200, 200)
            g.setSpacing(10, 10)
            self.viewer.addItem(g)
    
            self.horizontalLayout_2.addWidget(self.viewer)
    
            self.pause_button.clicked.connect(self.start)
            self.next_button.clicked.connect(self.next)
            self.prev_button.clicked.connect(self.previous)
    
            self.point = gl.GLScatterPlotItem(pos=[self.x_data[self.id], self.y_data[self.id], self.z_data[self.id]],
                                              color=pg.glColor("#0072BD"))
            self.viewer.addItem(self.point)
    
            self.timer = Qt.QTimer()
    
        def update(self):
            self.point.setData(pos=[self.x_data[self.id], self.y_data[self.id], -self.z_data[self.id]])
    
        def start(self):
            self.state = 1 if self.state == 0 else 0
            if self.state:
                self.animation()
            else:
                self.timer.stop()
    
        def next(self):
            self.id += 1
            if self.id >= len(self.x_data) or self.id >= len(self.y_data) or self.id >= len(self.z_data):
                self.id = 0
                self.timer.stop()
                print("End Of Simulation")
            else:
                self.update()
    
        def previous(self):
            self.id -= 1
            if self.id < 0:
                self.id = len(self.x_data)
            else:
                self.update()
    
        def animation(self):
            self.timer.timeout.connect(self.next)
            self.timer.start(25)
    
        def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
            self.state = 1
            self.start()
            self.viewer.clear()
            self.close()
    
    
    if __name__ == '__main__':
        data = {
            "vehicle_local_position":{
                "x" : list(range(100)),
                "y" : list(range(100)),
                "z" : list(range(100)),
            }
        }
        app = QtWidgets.QApplication(sys.argv)
        window = SimulationWin(data)
        window.show()
        app.exec_()
    
    

    The problem occurs from the start of application: sometimes extra point is added with coordinates (0, 0, 0) as shown in the screenshot: image I tried to print self.viewer.items to find this point as an object, also tried to print self.point.pos but this didn't help - there were 2 items (Grid and ScatterPlot) and self.point.pos is equal to coordinates from data given from outside to simulate. This point may start blinking frame by frame: image image Or just stay in it position till the and of the program.

    I tried to remove items, but extra point in this case is deleted with original point. It's necessary to notice, that this problem sometimes may not occur at all till the next launch

    I uses: Python 3.8 Windows 10 PyQt5 5.15.7 PyOpenGL 3.1.6 Pyqtgraph 0.12.4

    Almost don't understand, what to do with it. Here is additional screenshots: image image image

    opened by anton-pintya 0
  • How to select points from the 3d display of gl.GLScatterPlotItem

    How to select points from the 3d display of gl.GLScatterPlotItem

    Short description

    Code to reproduce

    import pyqtgraph as pg
    import numpy as np
    

    Expected behavior

    Real behavior

    An error occurred?
    Post the full traceback inside these 'code fences'!
    

    Tested environment(s)

    • PyQtGraph version:
    • Qt Python binding:
    • Python version:
    • NumPy version:
    • Operating system:
    • Installation method:

    Additional context

    opened by wanghui-min 0
Releases(pyqtgraph-0.13.1)
  • pyqtgraph-0.13.1(Sep 29, 2022)

    What's Changed

    Bug Fixes

    • Refactor examples using Interactor to run on changing function parameters by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2437

    API Change

    • deprecate GraphicsObject::parentChanged method by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2420

    Other

    • Move Console to generic template and make font Courier New by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2435
    Source code(tar.gz)
    Source code(zip)
  • pyqtgraph-0.13.0(Sep 27, 2022)

    What's Changed

    Highlights

    • With PyQt6 6.3.2+ PyQtGraph uses sip.array, which leads to significantly faster draw performance by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2314
    • Introducing "interactive" parameter trees by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2318
    • Minimum Qt version now 5.15 for Qt5 and 6.2+ for Qt6 by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2403
    • with enableExperimental pyqtgraph accesses QPainterPathPrivate for faster QPainterPath generation by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2324

    New Features

    • Interactive params fixup by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2318
    • Added possibility to use custom dock labels by @ardiloot in https://github.com/pyqtgraph/pyqtgraph/pull/2274
    • Introduce API option to control whether lines are drawn as segmented lines by @swvanbuuren in https://github.com/pyqtgraph/pyqtgraph/pull/2185
    • access QPainterPathPrivate for faster arrayToQPath by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2324
    • Update LabelItem to allow transparency in the text by @ElpadoCan in https://github.com/pyqtgraph/pyqtgraph/pull/2300
    • Make parameter tree read-only values selectable and copiable by @ardiloot in https://github.com/pyqtgraph/pyqtgraph/pull/2311
    • Have CSV exporter export error bar information by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2405
    • map pyqtgraph symbols to a matplotlib equivalent by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2395

    Performance Improvements

    • Improve performance of PlotCurveItem with QOpenGLWidget by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2264
    • ScatterPlotItem: use Format_ARGB32_Premultiplied by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2317
    • access QPainterPathPrivate for faster arrayToQPath by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2324
    • make use of PyQt sip.array by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2314

    Bug Fixes

    • Fix GLImageItem regression by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2232
    • Fixed the app crash on right clicked by @Cosmicoppai in https://github.com/pyqtgraph/pyqtgraph/pull/2236
    • Fix Regression in in ViewBox.updateScaleBox Caused by #2034 by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2241
    • Fix UFuncTypeError when plotting integer data on windows by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2249
    • Fixed division by zero when no pixmap is loaded by @StSav012 in https://github.com/pyqtgraph/pyqtgraph/pull/2275
    • Ensure in PlotCurveItem lookup occurs in tuple, not str by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2294
    • Fixed a crash when step option is missing by @StSav012 in https://github.com/pyqtgraph/pyqtgraph/pull/2261
    • Invalidate cached properties on geometryChanged signal by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2357
    • Bugfix: Handle example search failure due to bad regex by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2121
    • Address #2303 unapplied pen parameter constructor options by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2305
    • Issue #2203 Potential Fix: Disabled FlowchartCtrlWidget.nodeRenamed o… by @HallowedDust5 in https://github.com/pyqtgraph/pyqtgraph/pull/2301
    • Fix #2289 unwanted growing in scene context menu by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2306
    • #2283 delete limitation by rectangle width ROI by @sasha-sem in https://github.com/pyqtgraph/pyqtgraph/pull/2285
    • Update exception handling to catch exceptions in threads (py3 change) by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2309
    • Fix PlotCurveItem errors when pen=None by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2315
    • ScatterPlotItem point masking fix by @ardiloot in https://github.com/pyqtgraph/pyqtgraph/pull/2310
    • Use property to lazily declare rectangle by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2356
    • Fix missing import in Flowchart.py by @Puff-Machine in https://github.com/pyqtgraph/pyqtgraph/pull/2421
    • Fix doubling labels in DateAxisItem by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2413
    • GridItem: Fix pen for usage of dash-pattern by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2304
    • Update PColorMeshItem.py by @LarsVoxen in https://github.com/pyqtgraph/pyqtgraph/pull/2327
    • Fix infinite loop within DateAxisItem by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2365
    • Fix GraphicsScene.itemsNearEvent and setClickRadius by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2383
    • Modify MatplotlibWidget to accept QWidget super constructor parameters. by @Dolphindalt in https://github.com/pyqtgraph/pyqtgraph/pull/2366
    • Fix flickering, when panning/scrolling in a fully zoomed-out view by @bbc131 in https://github.com/pyqtgraph/pyqtgraph/pull/2387
    • Make auto downsample factor calculation more robust by @StSav012 in https://github.com/pyqtgraph/pyqtgraph/pull/2253
    • Fix : QPoint() no longer accepts float arguments by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2260
    • avoid double init of DockDrop by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2286
    • Add a few ImageView improvements by @outofculture in https://github.com/pyqtgraph/pyqtgraph/pull/1828

    API/Behavior Changes

    • remove border QGraphicsRectItem from scene by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2225
    • Introduce API option to control whether lines are drawn as segmented lines by @swvanbuuren in https://github.com/pyqtgraph/pyqtgraph/pull/2185
    • Modify CSV exporter to output original data without log mapping by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2297
    • Expose useCache ScatterPlotItem option from plot method by @ibrewster in https://github.com/pyqtgraph/pyqtgraph/pull/2258
    • remove legend items manually from scene by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2368
    • getHistogramRange for HistogramLUTItem by @kremeyer in https://github.com/pyqtgraph/pyqtgraph/pull/2397
    • Axis pen improvements by @ibrewster in https://github.com/pyqtgraph/pyqtgraph/pull/2398
    • remove MatplotlibWidget from pg namespace by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2400
    • change the libOrder to favor Qt6 by @Wubbzi in https://github.com/pyqtgraph/pyqtgraph/pull/2157

    Examples

    • Added Jupyter console widget and Example by @jonmatthis in https://github.com/pyqtgraph/pyqtgraph/pull/2353
    • Add glow example by @edumur in https://github.com/pyqtgraph/pyqtgraph/pull/2242
    • update multiplePlotSpeedTest.py to use PlotCurveItem instead of QGraphicsPathItem by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2426

    Docs

    • Add GLTextItem to docs by @jebguth in https://github.com/pyqtgraph/pyqtgraph/pull/2419
    • Add logo to docs by @ixjlyons in https://github.com/pyqtgraph/pyqtgraph/pull/2384
    • Enable nit-picky mode in documentation and fix associated warnings by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/1753
    • Added UML class diagram to give overview of the most important classes by @titusjan in https://github.com/pyqtgraph/pyqtgraph/pull/1631

    Other

    • Remove old Qt workarounds by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2224
    • Track when ScatterPlotItem clears the tooltip, only clear when needed by @ixjlyons in https://github.com/pyqtgraph/pyqtgraph/pull/2235
    • Avoid import error in HDF5 exporter by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2259
    • test enum using : "enums & enum" by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2250
    • add support for PySide6 6.3.0 QOverrideCursorGuard by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2263
    • Used the power of blockIfUnchanged decorator by @StSav012 in https://github.com/pyqtgraph/pyqtgraph/pull/2181
    • Handle/remove unused variables by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2094
    • BusyCursor and QPainter fixes for PyPy by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2349
    • Add a pyi stub file to import best-guess pyqt type hints by @outofculture in https://github.com/pyqtgraph/pyqtgraph/pull/2358
    • test_PlotCurveItem: unset skipFiniteCheck for next test by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2313
    • lazy create the rectangle selection item by @danielhrisca in https://github.com/pyqtgraph/pyqtgraph/pull/2168
    • fix: super().init does not need self by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2359
    • Promote interactive Run action to group level by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2414
    • Enhance testing for creating parameters from saved states by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2319
    • add support for PySide6's usage of Python Enums by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2329
    • remove QFileDialog PyQt4 compatibility code by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2394
    • Bugfix: interact on decorated method that uses self. by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2408
    • use single generic template for all bindings by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2226
    • interact() defaults to ON_ACTION behavior and accepts runActionTemplate argument by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2432

    New Contributors

    • @andriyor made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2212
    • @keziah55 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2191
    • @Cosmicoppai made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2236
    • @bbc131 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2264
    • @StSav012 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2181
    • @ardiloot made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2274
    • @sasha-sem made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2285
    • @swvanbuuren made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2185
    • @Anatoly1010 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2330
    • @LarsVoxen made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2327
    • @HallowedDust5 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2301
    • @ElpadoCan made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2300
    • @dependabot made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2342
    • @jaj42 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2389
    • @Dolphindalt made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2366
    • @kremeyer made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2397
    • @jonmatthis made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2353
    • @jebguth made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2419
    • @Puff-Machine made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2421

    Full Changelog: https://github.com/pyqtgraph/pyqtgraph/compare/pyqtgraph-0.12.4...pyqtgraph-0.13.0

    Source code(tar.gz)
    Source code(zip)
  • pyqtgraph-0.12.4(Mar 4, 2022)

    Highlights

    • Jupyter Support with optional jupyter-rfb library
    • Experimental high performance with lines >1px thick
    • Python 3.10 Support
    • PColorMesh Performance Improvement
    • PlotCurveItem fillLevel performance improvement

    What's Changed

    • experimental line drawing mode for thick lines by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2011
    • Add pymeasure in used by section by @msmttchr in https://github.com/pyqtgraph/pyqtgraph/pull/2033
    • Optimize PColorMeshItem by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2023
    • Fix displace between selection area and mouse pos by @leo603222 in https://github.com/pyqtgraph/pyqtgraph/pull/2034
    • Speed up connect='all' in the presence of non-finite by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2036
    • Fix deprecation warnings by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2038
    • Update README.md by @3fon3fonov in https://github.com/pyqtgraph/pyqtgraph/pull/2043
    • Fix WidgetGroup handling of QSplitter + code cleanup by @campagnola in https://github.com/pyqtgraph/pyqtgraph/pull/2047
    • Moved examples inside project directory by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2045
    • RemoteGraphicsView.py : implement pickle protocol by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2051
    • AxisItem: Ignore drag/wheel events on ViewBox. by @ales-erjavec in https://github.com/pyqtgraph/pyqtgraph/pull/2057
    • Maintain limits on ViewBox scaling by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2054
    • make PlotItem's average pen and shadow pen accessible by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2052
    • Disable and comment the prepareForPaint call in ViewBox.update() by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2053
    • add HussariX to the list of Used By in README by @sem-geologist in https://github.com/pyqtgraph/pyqtgraph/pull/2069
    • ViewBox quantization limit by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2064
    • re-add UTF-8 encoding to example app code loader by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2061
    • implement glInfo without PyOpenGL by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2073
    • Run isort and pycln over entire repo - upgrade pre-commit config by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2002
    • Deprecate QtWidgets accessed through QtGui by @outofculture in https://github.com/pyqtgraph/pyqtgraph/pull/1915
    • Improved error message for invalid PYQTGRAPH_QT_LIB by @max-radin in https://github.com/pyqtgraph/pyqtgraph/pull/2077
    • speed up PlotCurveItem fillLevel by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2032
    • add check for roi scene by @hyperiongeo in https://github.com/pyqtgraph/pyqtgraph/pull/2083
    • update imports in the broken example demos by @Wubbzi in https://github.com/pyqtgraph/pyqtgraph/pull/2087
    • Don't raise exception when close method of an already-closed dock is called by @max-radin in https://github.com/pyqtgraph/pyqtgraph/pull/2089
    • reverse coordinates when drawing on row-major images by @outofculture in https://github.com/pyqtgraph/pyqtgraph/pull/2085
    • Separate x and y flags for AxisItem.setLogMode by @max-radin in https://github.com/pyqtgraph/pyqtgraph/pull/2081
    • Jupyter PlotWidget example by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2055
    • Add some helpful exceptions for invalid inputs to methods by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2092
    • Except clause must be exception type, not exception instance by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2093
    • avoid redundant assignment of pos=pos by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2095
    • Be lazier about importing h5py by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2096
    • Remove polluting imports using * by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2098
    • Avoid reusing variables in nested loops by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2100
    • Convert == None checks to is None by @ksunden in https://github.com/pyqtgraph/pyqtgraph/pull/2099
    • change binder to requirements.txt by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2104
    • set PLATFORM=offscreen in binder/start by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2106
    • Add a proxy delay to checklist parameter changes via children edits by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2097
    • Fix stuck ColorBarItem by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2103
    • more convenience methods for color maps and bars by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2090
    • allow unsetting options in PlotDataItem and PlotCurveItem by @NilsNemitz in https://github.com/pyqtgraph/pyqtgraph/pull/2041
    • use smaller font size for ROIExamples.ipynb by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2112
    • PlotCurveItem OpenGL : avoid automatic conversion from float64 to float32 by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2111
    • win32 np.clip slowness fixed in numpy by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2125
    • Fix deprecation warnings by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2124
    • RangeColorMapItem derives from ptree.types.ColorMapParameter by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2130
    • Fix PySide6 6.2.2 breaking change by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2132
    • avoid PyOpenGL automatic array conversion by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2131
    • avoid comparing string with ndarray by @pijyoi in https://github.com/pyqtgraph/pyqtgraph/pull/2148
    • Fire correct signal type for checklist value changing by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2147
    • Use GroupParameter instead of popup button for PenParameter by @ntjess in https://github.com/pyqtgraph/pyqtgraph/pull/2086
    • change GroupParameterItem palette to address issue in darkmode on mac by @Wubbzi in https://github.com/pyqtgraph/pyqtgraph/pull/2101
    • Fix automatic int-casting code for Python 3.10 compatibility by @JamesWrigley in https://github.com/pyqtgraph/pyqtgraph/pull/2149
    • Fix more int-casting code for Python 3.10 compatibility by @JamesWrigley in https://github.com/pyqtgraph/pyqtgraph/pull/2153
    • Fix typos and formatting errors by @JamesWrigley in https://github.com/pyqtgraph/pyqtgraph/pull/2154
    • Added projects to Used by list by @jakimowb in https://github.com/pyqtgraph/pyqtgraph/pull/2172
    • Fix formatting on minimum value of GradientLegend. by @CanisUrsa in https://github.com/pyqtgraph/pyqtgraph/pull/2170
    • Add an option to makeARGB to disable masking NaNs by @JamesWrigley in https://github.com/pyqtgraph/pyqtgraph/pull/2192
    • avoid unnecessary call if autorange is disabled by @danielhrisca in https://github.com/pyqtgraph/pyqtgraph/pull/2199
    • micro-optimization for plotcurveitem paint by @danielhrisca in https://github.com/pyqtgraph/pyqtgraph/pull/2201
    • cache the ViewBox view pixel size by @danielhrisca in https://github.com/pyqtgraph/pyqtgraph/pull/2202
    • improve GraphicsWidget paint speed by caching the bounding rect and the path used by the shape method by @danielhrisca in https://github.com/pyqtgraph/pyqtgraph/pull/2198
    • numpy deprecated binary use of fromstring by @outofculture in https://github.com/pyqtgraph/pyqtgraph/pull/2194
    • Add Python 3.10 to CI - Re-Enable pytest-xdist in CI by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2150
    • Bump to 0.12.4 by @j9ac9k in https://github.com/pyqtgraph/pyqtgraph/pull/2209

    New Contributors

    • @msmttchr made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2033
    • @leo603222 made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2034
    • @3fon3fonov made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2043
    • @max-radin made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2077
    • @hyperiongeo made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2083
    • @Wubbzi made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2087
    • @JamesWrigley made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2149
    • @jakimowb made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2172
    • @CanisUrsa made their first contribution in https://github.com/pyqtgraph/pyqtgraph/pull/2170

    Full Changelog: https://github.com/pyqtgraph/pyqtgraph/compare/pyqtgraph-0.12.3...pyqtgraph-0.12.4

    Source code(tar.gz)
    Source code(zip)
  • pyqtgraph-0.12.3(Oct 11, 2021)

  • pyqtgraph-0.12.2(Jul 8, 2021)

  • pyqtgraph-0.12.1(Apr 7, 2021)

  • pyqtgraph-0.12.0(Mar 25, 2021)

  • pyqtgraph-0.11.1(Dec 20, 2020)

  • pyqtgraph-0.11.0(Jun 8, 2020)

A python package for animating plots build on matplotlib.

animatplot A python package for making interactive as well as animated plots with matplotlib. Requires Python = 3.5 Matplotlib = 2.2 (because slider

Tyler Makaro 394 Dec 18, 2022
Visual Python is a GUI-based Python code generator, developed on the Jupyter Notebook environment as an extension.

Visual Python is a GUI-based Python code generator, developed on the Jupyter Notebook environment as an extension.

Visual Python 564 Jan 03, 2023
Shaded 😎 quantile plots

shadyquant 😎 This python package allows you to quantile and plot lines where you have multiple samples, typically for visualizing uncertainty. Your d

Mehrad Ansari 13 Sep 29, 2022
Visualizations of some specific solutions of different differential equations.

Diff_sims Visualizations of some specific solutions of different differential equations. Heat Equation in 1 Dimension (A very beautiful and elegant ex

2 Jan 13, 2022
Minimalistic tool to visualize how the routes to a given target domain change over time, feat. Python 3.10 & mermaid.js

Minimalistic tool to visualize how the routes to a given target domain change over time, feat. Python 3.10 & mermaid.js

Péter Ferenc Gyarmati 1 Jan 17, 2022
Small project to recursively calculate and plot each successive order of the Hilbert Curve

hilbert-curve Small project to recursively calculate and plot each successive order of the Hilbert Curve. After watching 3Blue1Brown's video on Hilber

Stefan Mejlgaard 2 Nov 15, 2021
Lightweight data validation and adaptation Python library.

Valideer Lightweight data validation and adaptation library for Python. At a Glance: Supports both validation (check if a value is valid) and adaptati

Podio 258 Nov 22, 2022
Some method of processing point cloud

Point-Cloud Some method of processing point cloud inversion the completion pointcloud to incomplete point cloud Some model of encoding point cloud to

Tan 1 Nov 19, 2021
These data visualizations were created as homework for my CS40 class. I hope you enjoy!

Data Visualizations These data visualizations were created as homework for my CS40 class. I hope you enjoy! Nobel Laureates by their Country of Birth

9 Sep 02, 2022
An interactive dashboard for visualisation, integration and classification of data using Active Learning.

AstronomicAL An interactive dashboard for visualisation, integration and classification of data using Active Learning. AstronomicAL is a human-in-the-

45 Nov 28, 2022
China and India Population and GDP Visualization

China and India Population and GDP Visualization Historical Population Comparison between India and China This graph shows the population data of Indi

Nicolas De Mello 10 Oct 27, 2021
flask extension for integration with the awesome pydantic package

Flask-Pydantic Flask extension for integration of the awesome pydantic package with Flask. Installation python3 -m pip install Flask-Pydantic Basics v

249 Jan 06, 2023
HW 02 for CS40 - matplotlib practice

HW 02 for CS40 - matplotlib practice project instructions https://github.com/mikeizbicki/cmc-csci040/tree/2021fall/hw_02 Drake Lyric Analysis Bar Char

13 Oct 27, 2021
The implementation of the paper "HIST: A Graph-based Framework for Stock Trend Forecasting via Mining Concept-Oriented Shared Information".

The HIST framework for stock trend forecasting The implementation of the paper "HIST: A Graph-based Framework for Stock Trend Forecasting via Mining C

Wentao Xu 111 Jan 03, 2023
Standardized plots and visualizations in Python

Standardized plots and visualizations in Python pltviz is a Python package for standardized visualization. Routine and novel plotting approaches are f

Andrew Tavis McAllister 0 Jul 09, 2022
Type-safe YAML parser and validator.

StrictYAML StrictYAML is a type-safe YAML parser that parses and validates a restricted subset of the YAML specification. Priorities: Beautiful API Re

Colm O'Connor 1.2k Jan 04, 2023
View part of your screen in grayscale or simulated color vision deficiency.

monolens View part of your screen in grayscale or filtered to simulate color vision deficiency. Watch the demo on YouTube. Install with pip install mo

Hans Dembinski 31 Oct 11, 2022
Visualization ideas for data science

Nuance I use Nuance to curate varied visualization thoughts during my data scientist career. It is not yet a package but a list of small ideas. Welcom

Li Jiangchun 16 Nov 03, 2022
🎨 Python Echarts Plotting Library

pyecharts Python ❤️ ECharts = pyecharts English README 📣 简介 Apache ECharts (incubating) 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达

pyecharts 13.1k Jan 03, 2023
Dimensionality reduction in very large datasets using Siamese Networks

ivis Implementation of the ivis algorithm as described in the paper Structure-preserving visualisation of high dimensional single-cell datasets. Ivis

beringresearch 284 Jan 01, 2023