3D geolocation visualization and 2D plotting utilities built on Plotly
Project description
Plot (3D Geolocation Visualization)
3D geolocation visualization and 2D plotting utilities built on Plotly. Requires Python 3.12+.
Overview
This library renders parametric geometric shapes (ellipsoids, spheres, cones, cylinders) and observable surfaces that inherit from them (AOA cones, line-of-sight rays, range spheres) as interactive 3D meshes. It also provides shorthand functions for 2D scatter plots and geographic maps.
Installation
pip install gri-plot
For development:
git clone https://gitlab.com/geosol-foss/python/gri-plot.git
cd gri-plot
. .init_venv.sh
Quick Start
from gri_plot import scatter
# Simple 2D scatter plot -- pass traces as (y,), (x,y), or (x,y,kwargs)
scatter(
([1, 2, 3, 4],), # y-only trace
([0, 1, 2, 3], [1, 4, 2, 5]), # x,y trace
([0, 1, 2, 3], [2, 3, 1, 4], {"name": "Series B"}),
title="Example Plot",
)
Scatter
Plotly scatter plots with flexible input formats. Accepts variable-length trace info as (y,), (x,y), or (x,y,trace_args). All traces must consistently define or omit x. Uses plotly_dark template by default.
Scatter Map
Geographic scatter maps using Plotly's Scattermapbox. Takes lat/lon sequences, uses ArcGIS World Imagery as the base layer, and auto-centers the map based on data bounds.
from gri_plot import scatter_map
scatter_map(
lats=[40.0, 40.1, 40.2],
lons=[-105.0, -104.9, -104.8],
title="Station Locations",
)
Figure3D
Scene builder for composing 3D visualizations from multiple surfaces and points:
add_surface(): Add anyImplicitShape(shapes or observables)add_points(): Add labeled scatter pointsadd_line(): Add line segments connecting pointsplot_surfaces(): Convenience function for quick multi-surface plots- Method chaining, automatic color cycling from D3 palette,
plotly_darktemplate
from gri_plot import Figure3D
from gri_plot.shapes import Sphere
import numpy as np
fig = Figure3D()
fig.add_surface(Sphere(center=np.array([0, 0, 0]), radius=100))
fig.add_points(np.array([[50, 50, 50]]), labels=["Target"])
fig.show()
Frames
Coordinate frame handling for 3D display:
- Frame enum: XYZ (ECEF), ENU (local tangent plane), LLA (lat/lon/alt)
- FrameTransformer: Converts between XYZ and display frame using gri-utils coordinate conversions
- Bounds: Named tuple for axis-aligned bounding boxes with frame metadata
- All internal computation in XYZ; frame conversion applied only for display
Shapes
Geometric primitives implementing the ImplicitShape ABC. Each supports parametric mesh generation (fast, exact geometry) and implicit residual evaluation.
- Ellipsoid: From center + covariance matrix, or center + semi-axes + rotation matrix
- Sphere: From center + radius
- Cone: From apex + axis direction + half-angle + height
- Cylinder: From center + axis direction + radius + height
- Mesh generators: Standalone functions (
sphere_mesh,ellipsoid_mesh,cone_mesh,cylinder_mesh) for direct vertex/face generation
Observables
Geolocation-specific surfaces that inherit from parametric shapes:
- AoaSurface: AOA cone (extends Cone) from collector position + measured direction + angular error
- LosSurface: Line of sight ray (extends Cylinder) from start point + direction + length; also provides
to_line_trace()for simple line rendering - RangeSphere: Range/TOA sphere (extends Sphere) from collector position + range measurement
Surfaces
Low-level infrastructure for shape rendering:
- ImplicitShape ABC: Interface requiring
residual_fn(),get_bounds_xyz(),to_mesh(),to_trace(),is_volume,label; also providescontains()for point-in-shape testing - Mesh utilities:
grid_to_mesh()(parametric grid triangulation),vertices_to_mesh3d()(vertices/faces to Plotly Mesh3d trace)
Dependencies
- plotly: Interactive 2D and 3D visualization
- numpy: Array operations
- gri-utils: Coordinate conversions and constants
Other Projects
Current list of other GRI FOSS Projects we are building and maintaining.
License
MIT License. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gri_plot-0.2.5.tar.gz.
File metadata
- Download URL: gri_plot-0.2.5.tar.gz
- Upload date:
- Size: 2.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
851c096834c388e4015370b184fe8f3e6186bbf3fe307f758bde1611ee54491b
|
|
| MD5 |
b6c7414002d9163c1fc23b46600fc4ec
|
|
| BLAKE2b-256 |
b3ffb474fd5184b0ac388e68a6715041be1d97ac0548cd6d722a71f602e81481
|
File details
Details for the file gri_plot-0.2.5-py3-none-any.whl.
File metadata
- Download URL: gri_plot-0.2.5-py3-none-any.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf6768c317e8d2f492956a20d8bf835b62583939e8e9781e317d3edcde782abc
|
|
| MD5 |
99277e1037f0a6bb195412ee3ab5362c
|
|
| BLAKE2b-256 |
9ea493d49e514087457e4c90ffd391a1d4ea26990604db4bf8882453550d87e5
|