Skip to content

Releases: flekschas/jupyter-scatter

v0.12.4

04 Apr 18:51
v0.12.4
b481548
Compare
Choose a tag to compare

Changes

  • Respect the dictionary key-value order of categorical encoding maps in the legend. E.g., the following categorical color map legend will read C, then B, and finally A:

    scatter.legend(True)
    scatter.color(map=dict(C='red', B='blue', A='pink'))
  • Update third-party JS libraries

v0.12.3

04 Apr 18:51
v0.12.3
70f12bb
Compare
Choose a tag to compare

Changes

  • Fix incorrect legend for categorical coloring

v0.12.2

04 Apr 18:52
v0.12.2
3a85327
Compare
Choose a tag to compare

Changes

  • Update regl-scatterplot to v1.6.9

v0.12.1

04 Apr 18:52
v0.12.1
bdf647b
Compare
Choose a tag to compare

Changes

  • Fix the ordering of the legend's value labels for continuous encodings such that high to low values are order top to bottom (#70)

v0.12.0

04 Apr 18:53
v0.12.0
beda9b8
Compare
Choose a tag to compare

Changes

  • Add support for referencing points by the Pandas DataFrame's index via Scatter(data_use_index=True) or scatter.data(use_index=True). This is useful for synchronizing the selection or filtering of two Scatter instances that operate on different data frames with point correspondences. (#62

    import jscatter
    import numpy as np
    import pandas as pd
    
    df1 = pd.DataFrame(
        data=np.random.rand(16, 2),
        index=[chr(65 + x) for x in range(16)],
        columns=['x', 'y']
    )
    df2 = pd.DataFrame(
        data=np.random.rand(8, 2),
        index=[chr(76 - x) for x in range(8)],
        columns=['x', 'y']
    )
    
    s1 = jscatter.Scatter(data=df1, data_use_index=True, x='x', y='y', x_scale=[0, 2], y_scale=[0, 1])
    s2 = jscatter.Scatter(data=df2, data_use_index=True, x='x', y='y', x_scale=[-1, 1], y_scale=[0, 1])
    
    def on_selection_change(change):
        s2.selection(s1.selection())
    
    s1.widget.observe(on_selection_change, names='selection')
    
    jscatter.compose([s1, s2])
    shorter.mp4
  • Avoid unregistering all observers when calling jscatter.compose() such that external observers remain registered

  • Fix undefined this in codec preventing the scatter.selection() from working correctly (#66)

v0.11.0

04 Apr 18:54
v0.11.0
ff2b1fe
Compare
Choose a tag to compare

Changes

  • Add scatter.filter([0, 1, 2]) for filtering down points. Filtering down to a specific subset of points is much faster than than updating the underlying data (#61)
  • Add scatter.data(df) to allow rendering new data points without having to re-initialize the scatter instance (#61)
  • Add the ability to automatically zoom to filtered points via Scatter(zoom_on_filter=True) or scatter.zoom(on_filter=True)
  • Add lasso on long press and make it the default. The behavior can be changed via Scatter(lasso_on_long_press=False) or scatter.lasso(on_long_press=False)
  • Updated regl-scatterplot to v1.6

v0.10.0

04 Apr 18:55
v0.10.0
345482e
Compare
Choose a tag to compare

Changes

  • Add support for automatic zooming to selected points via scatter.zoom(on_selection=True)
  • Fix view synchronization issue
  • Add remove() to the JS widget to ensure that the scatterplot is destroyed in ipywidgets v8.

v0.9.0

04 Apr 18:55
v0.9.0
fd6b2c2
Compare
Choose a tag to compare

Changes

  • Add support for animated zooming to a set of points via scatter.zoom(pointIndices) (#49)
  • Bump regl-scatterplot to v1.4.1
  • Add support for VSCode and Colab (#37)
  • Fix serving of numpy data for JS client. Use consistent serialization object between JS and Python.

v0.8.0

04 Apr 18:56
v0.8.0
6828598
Compare
Choose a tag to compare

Changes

  • Add support for end labeling of continuous data encoding via a new labeling argument of color(), opacity(), size(), connection_color(), connection_opacity(), and connection_size(). (#46)
  • Fix the incorrect size legend when the size map is reversed (#47)

v0.7.3

04 Apr 18:58
v0.7.3
4b1bf94
Compare
Choose a tag to compare

Changes

  • Fix broken build of v0.7.2
  • Fix versions of ipywidgets and jupyterlab_widgets to avoid running into incompatibilities (#40)