visualization package
Project description
Cleopatra
Cleopatra is a matplotlib utility package for visualizing 2D/3D numpy arrays, unstructured meshes, point clouds, vector fields, polygons, lines, and statistical distributions. It targets scientific and research users working with geospatial and raster data, providing a high-level API over matplotlib with sensible defaults and rich customization.
For the package's boundaries — what belongs here and what does not — see SCOPE.md.
Package Layout
graph TD
subgraph core["Core"]
glyph["<b>glyph</b><br/>Glyph — base class<br/>figure/axes · color norms · classification<br/>colorbars · ticks · point overlays · animation"]
end
subgraph visualizers["Visualizers — subclass Glyph"]
array_glyph["<b>array_glyph</b><br/>ArrayGlyph · FacetGrid<br/>2D/3D rasters, facets, animation"]
mesh_glyph["<b>mesh_glyph</b><br/>MeshGlyph<br/>unstructured meshes"]
scatter_glyph["<b>scatter_glyph</b><br/>ScatterGlyph<br/>point clouds"]
vector_glyph["<b>vector_glyph</b><br/>VectorGlyph<br/>vector fields"]
flow_glyph["<b>flow_glyph</b><br/>FlowGlyph<br/>flow paths"]
line_glyph["<b>line_glyph</b><br/>LineGlyph<br/>line / bar / band"]
polygon_glyph["<b>polygon_glyph</b><br/>PolygonGlyph<br/>polygon collections"]
kde_glyph["<b>kde_glyph</b><br/>KDEGlyph<br/>2D kernel density"]
end
subgraph standalone["Standalone"]
statistical_glyph["<b>statistical_glyph</b><br/>StatisticalGlyph<br/>histogram · boxplot · multiboxplot · stripes"]
end
subgraph support["Supporting utilities"]
styles["<b>styles</b><br/>Styles · Scale · ColorScale<br/>MidpointNormalize · classify · resolve_sizes · legends"]
colors["<b>colors</b><br/>Colors<br/>hex/RGB conversion · colormaps"]
animation["<b>animation</b><br/>save_animation · to_gif · embed_gif"]
projection["<b>projection</b><br/>apply_projection_frame"]
config["<b>config</b><br/>Config — matplotlib backend helper"]
end
subgraph optional["Optional — cleopatra[tiles]"]
tiles["<b>tiles</b><br/>add_tiles · fetch / stitch helpers<br/>XYZ web-tile basemaps"]
end
array_glyph & mesh_glyph & scatter_glyph & vector_glyph & flow_glyph & line_glyph & polygon_glyph & kde_glyph ==>|extends| glyph
glyph -->|color scales · classification| styles
glyph -->|save / embed| animation
array_glyph -.->|optional basemap| tiles
glyphprovides the sharedGlyphbase class (figure/axes lifecycle, colorbars, color norms, ticks, classification, animation).- The user-facing visualizers all subclass
Glyphand share its colour-mapping/colorbar pipeline —array_glyph(ArrayGlyph,FacetGrid),mesh_glyph(MeshGlyph),scatter_glyph(ScatterGlyph),vector_glyph(VectorGlyph),flow_glyph(FlowGlyph),line_glyph(LineGlyph),polygon_glyph(PolygonGlyph), andkde_glyph(KDEGlyph).statistical_glyph(StatisticalGlyph) stands alone. tilesadds the optional web-tile basemap helper (cleopatra.tiles.add_tiles), behind thecleopatra[tiles]extra.colors,styles,animation,projection, andconfigare supporting utilities (colour conversions; predefined styles,MidpointNormalize,ColorScale, value→size mapping,classifyclassification schemes and legend builders; glyph-independent animation save/embed helpers; static projected map frames; and the matplotlib-backend helper).
Main Features
ArrayGlyph -- Raster / Array Visualization
- Plot 2D numpy arrays with automatic colorbar and customizable color scales (linear, power, symmetric log-norm, boundary-norm, midpoint).
- Display cell values and overlay point markers on the plot.
- Animate 3D arrays over time and export to GIF, MP4, MOV, or AVI (via ffmpeg).
MeshGlyph -- Unstructured Mesh Visualization
- Visualize UGRID-style unstructured mesh data using triangulation (
tripcolor,tricontourf). - Render wireframe outlines via
LineCollection. - Accepts raw numpy arrays of node coordinates and face-node connectivity.
- Animate time-varying mesh data.
StatisticalGlyph -- Distribution Plots
- Create histograms for 1D and 2D datasets with customizable bins, colors, and transparency.
- Draw boxplots, multi-boxplots, and strip plots.
ScatterGlyph -- Point Clouds
- Plot 2D point clouds, colour-mapped by a per-point
valuesarray with a matching colorbar. - Encode a second quantity through per-point marker
sizes(with an optional size legend), so colour and size carry two variables at once.
VectorGlyph -- Vector Fields
- Render 2D
(u, v)vector fields as arrows (quiver), wind barbs, or streamlines. - Colour the artist by vector magnitude
hypot(u, v)through the shared scalar-mapping pipeline.
FlowGlyph -- Flow Paths
- Draw a sequence of polylines as a
LineCollection, colour-mapped by a per-pathvaluesarray. - Scale per-path line widths by magnitude, with an optional width legend.
LineGlyph -- Line / Bar / Band Plots
- Line, bar, and
fill_between(band) plots from 1D or 2Dy(one series per column).
PolygonGlyph -- Polygon Collections
- Fill and colour-map collections of polygons by a per-polygon
valuesarray, or draw outlines only.
KDEGlyph -- Kernel Density
- Estimate a 2D Gaussian kernel density of an
(x, y)point cloud (NumPy only, no scipy) and draw it as filled or line density contours.
Colors -- Color Utilities
- Convert between hex, RGB (0-255), and normalized RGB (0-1) formats.
- Extract color ramps from images and create custom matplotlib colormaps.
Installation
pip
pip install cleopatra
# with the optional web-tile basemap support (cleopatra.tiles.add_tiles)
pip install "cleopatra[tiles]"
conda
conda install -c conda-forge cleopatra
# with the optional web-tile basemap support
conda install -c conda-forge cleopatra-tiles
The conda packages are built from the
cleopatra-feedstock
(the cleopatra-tiles output bundles mercantile, pillow, pyproj, and
xyzservices).
From source (latest development version)
pip install git+https://github.com/serapeum-org/cleopatra
Quick Start
Plot a 2D array
import numpy as np
from cleopatra.array_glyph import ArrayGlyph
arr = np.random.rand(10, 10)
glyph = ArrayGlyph(arr)
fig, ax = glyph.plot(title="Random Array")
Create a histogram
import numpy as np
from cleopatra.statistical_glyph import StatisticalGlyph
data = np.random.normal(0, 1, 1000)
stat = StatisticalGlyph(data)
fig, ax = stat.histogram(bins=30)
Plot an unstructured mesh
import numpy as np
from cleopatra.mesh_glyph import MeshGlyph
node_x = np.array([0.0, 1.0, 0.5, 1.5])
node_y = np.array([0.0, 0.0, 1.0, 1.0])
face_nodes = np.array([[0, 1, 2], [1, 3, 2]])
face_data = np.array([10.0, 20.0])
mg = MeshGlyph(node_x, node_y, face_nodes)
fig, ax = mg.plot(face_data, location="face", title="Mesh Data")
Plot a value-coloured point cloud
import numpy as np
from cleopatra.scatter_glyph import ScatterGlyph
x = np.random.rand(100)
y = np.random.rand(100)
values = np.random.rand(100)
sg = ScatterGlyph(x, y, values=values)
fig, ax, sc = sg.plot(title="Scatter")
Plot a vector field
import numpy as np
from cleopatra.vector_glyph import VectorGlyph
x, y = np.meshgrid(np.linspace(0, 1, 8), np.linspace(0, 1, 8))
u, v = np.cos(x), np.sin(y)
vg = VectorGlyph(x, y, u, v)
fig, ax, artist = vg.plot(kind="quiver", title="Vector Field")
Requirements
- Python >= 3.11
- numpy >= 2.0.0
- matplotlib >= 3.9
Documentation
Full documentation is available at serapeum-org.github.io/cleopatra.
License
Cleopatra is licensed under the GNU General Public License v3.
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 cleopatra-0.21.0.tar.gz.
File metadata
- Download URL: cleopatra-0.21.0.tar.gz
- Upload date:
- Size: 4.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29cffd0418671670dc098f769a7c57865fd8056b2ae7f14f67561b026209535d
|
|
| MD5 |
e30d1e7bbbf8a91c7e8722361c4c7ebf
|
|
| BLAKE2b-256 |
0db2199a980bb29dd8517b1d5ba147737d296a264f684917d8db303a50c95f0c
|
File details
Details for the file cleopatra-0.21.0-py3-none-any.whl.
File metadata
- Download URL: cleopatra-0.21.0-py3-none-any.whl
- Upload date:
- Size: 158.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a9f058509aea7bba078c7b47631f2bbe2f526fb6f672429668d2332f3a47a9a
|
|
| MD5 |
34b589189043d35918f27675fec92c19
|
|
| BLAKE2b-256 |
a1ec790a116a1bfc07c90ececa3fe26f9d06e20ab22815b3ba451b4152c09a63
|