Skip to content

Commit 7630c97

Browse files
committed
fix merge conflicts
2 parents 4662d3f + 06386b4 commit 7630c97

108 files changed

Lines changed: 1199 additions & 471 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/gridplot.ipynb

Lines changed: 149 additions & 35 deletions
Large diffs are not rendered by default.

examples/gridplot_simple.ipynb

Lines changed: 208 additions & 20 deletions
Large diffs are not rendered by default.

examples/histogram.ipynb

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
"outputs": [],
1111
"source": [
1212
"import numpy as np\n",
13-
"from matplotlib import pyplot as plt\n",
14-
"from fastplotlib import Plot, Histogram"
13+
"from fastplotlib import Plot"
1514
]
1615
},
1716
{
@@ -23,7 +22,7 @@
2322
{
2423
"data": {
2524
"application/vnd.jupyter.widget-view+json": {
26-
"model_id": "c2adf222a2fb4b5cab43c24aa9729a1a",
25+
"model_id": "bfd22d77d24549128dd925e4114c929e",
2726
"version_major": 2,
2827
"version_minor": 0
2928
},
@@ -51,14 +50,14 @@
5150
"name": "stderr",
5251
"output_type": "stream",
5352
"text": [
54-
"/home/kushal/Insync/kushalkolar@gmail.com/drive/repos/pygfx/pygfx/geometries/_plane.py:19: RuntimeWarning: invalid value encountered in true_divide\n",
53+
"/home/kushal/python-venvs/mescore/lib/python3.10/site-packages/pygfx/geometries/_plane.py:19: RuntimeWarning: invalid value encountered in true_divide\n",
5554
" texcoords = (positions[..., :2] + dim / 2) / dim\n"
5655
]
5756
},
5857
{
5958
"data": {
6059
"text/html": [
61-
"<div class='initial-snapshot-6b60165554804f6da43ad1b40f9baffa' style='position:relative;'><img src='data:image/png;base64,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' style='width:500.0px;height:300.0px;' /><div style='position: absolute; top:0; left:0; padding:1px 3px; background: #777; color:#fff; font-size: 90%; font-family:sans-serif; '>initial snapshot</div></div>"
60+
"<div class='initial-snapshot-36e4fff0aa7a4fc993c70f7cfc2aaf4a' style='position:relative;'><img src='data:image/png;base64,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' style='width:500.0px;height:300.0px;' /><div style='position: absolute; top:0; left:0; padding:1px 3px; background: #777; color:#fff; font-size: 90%; font-family:sans-serif; '>initial snapshot</div></div>"
6261
],
6362
"text/plain": [
6463
"<jupyter_rfb._utils.Snapshot object>"
@@ -70,7 +69,7 @@
7069
{
7170
"data": {
7271
"application/vnd.jupyter.widget-view+json": {
73-
"model_id": "6b60165554804f6da43ad1b40f9baffa",
72+
"model_id": "36e4fff0aa7a4fc993c70f7cfc2aaf4a",
7473
"version_major": 2,
7574
"version_minor": 0
7675
},

examples/lineplot.ipynb

Lines changed: 31 additions & 29 deletions
Large diffs are not rendered by default.

examples/scatter.ipynb

Lines changed: 36 additions & 33 deletions
Large diffs are not rendered by default.

examples/simple.ipynb

Lines changed: 144 additions & 49 deletions
Large diffs are not rendered by default.

fastplotlib/__init__.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
from .graphics import *
2-
from .layouts import GridPlot
3-
from .subplot import Subplot
41
from .plot import Plot
52
from pathlib import Path
63
from wgpu.gui.auto import run

fastplotlib/defaults.py

Lines changed: 0 additions & 12 deletions
This file was deleted.

fastplotlib/graphics/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
1-
from .graphics import Image, Scatter, Line, Histogram
2-
__all__ = ["Image", "Scatter", "Line", "Histogram"]
1+
from .histogram import HistogramGraphic
2+
from .line import LineGraphic
3+
from .scatter import ScatterGraphic
4+
from .image import ImageGraphic
5+
from .heatmap import HeatmapGraphic
6+
7+
__all__ = ["ImageGraphic", "ScatterGraphic", "LineGraphic", "HistogramGraphic", "HeatmapGraphic"]

fastplotlib/graphics/_base.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from typing import Any
2+
3+
import numpy as np
4+
import pygfx
5+
6+
from fastplotlib.utils import get_colors, map_labels_to_colors
7+
8+
9+
class Graphic:
10+
def __init__(
11+
self,
12+
data,
13+
colors: np.ndarray = None,
14+
colors_length: int = None,
15+
cmap: str = None,
16+
alpha: float = 1.0,
17+
name: str = None
18+
):
19+
self.data = data.astype(np.float32)
20+
self.colors = None
21+
22+
self.name = name
23+
24+
# if colors_length is None:
25+
# colors_length = self.data.shape[0]
26+
27+
if colors is not False:
28+
self._set_colors(colors, colors_length, cmap, alpha, )
29+
30+
def _set_colors(self, colors, colors_length, cmap, alpha):
31+
if colors_length is None:
32+
colors_length = self.data.shape[0]
33+
34+
if colors is None and cmap is None: # just white
35+
self.colors = np.vstack([[1., 1., 1., 1.]] * colors_length).astype(np.float32)
36+
37+
elif (colors is None) and (cmap is not None):
38+
self.colors = get_colors(n_colors=colors_length, cmap=cmap, alpha=alpha)
39+
40+
elif (colors is not None) and (cmap is None):
41+
# assume it's already an RGBA array
42+
colors = np.array(colors)
43+
if colors.shape == (1, 4) or colors.shape == (4,):
44+
self.colors = np.vstack([colors] * colors_length).astype(np.float32)
45+
elif colors.ndim == 2 and colors.shape[1] == 4 and colors.shape[0] == colors_length:
46+
self.colors = colors.astype(np.float32)
47+
else:
48+
raise ValueError(f"Colors array must have ndim == 2 and shape of [<n_datapoints>, 4]")
49+
50+
elif (colors is not None) and (cmap is not None):
51+
if colors.ndim == 1 and np.issubdtype(colors.dtype, np.integer):
52+
# assume it's a mapping of colors
53+
self.colors = np.array(map_labels_to_colors(colors, cmap, alpha=alpha)).astype(np.float32)
54+
55+
else:
56+
raise ValueError("Unknown color format")
57+
58+
@property
59+
def children(self) -> pygfx.WorldObject:
60+
return self.world_object.children
61+
62+
def update_data(self, data: Any):
63+
pass
64+
65+
def __repr__(self):
66+
if self.name is not None:
67+
return f"'{self.name}' fastplotlib.{self.__class__.__name__} @ {hex(id(self))}"
68+
else:
69+
return f"fastplotlib.{self.__class__.__name__} @ {hex(id(self))}"
70+

0 commit comments

Comments
 (0)