Soil Texture Plot
soiltextureplot is a Python package for soil texture classification and visualization with ternary diagrams.
Features
- Ternary Plotting: Visualize soil texture data on interactive ternary diagrams
- Multiple Classification Systems: Support for USDA and HYPRES soil texture classification systems
- Command-Line Interface: Classify CSVs and save texture triangle plots with
soiltextureplot - Interactive Web App: Streamlit-based application for easy data upload and visualization
- Flexible Data Input: Support for CSV files with customizable column mapping
- Point Classification: Automatic classification of soil samples into texture classes
- Customizable Visualization: Control point sizes, colors, and labels
Install
Install with uv:
uv add soiltextureplot
Install with pip:
pip install soiltextureplot
Optional app extras:
pip install "soiltextureplot[app]"
Quick Usage
import pandas as pd
from soiltextureplot.triangle import SoilTextureTriangle
example_df = pd.DataFrame(
{
"sample_id": ["S1", "S2", "S3", "S4"],
"sand": [75, 65, 45, 35],
"silt": [15, 20, 35, 40],
"clay": [10, 15, 20, 25],
"BD": [1.35, 1.42, 1.20, 1.18],
}
)
tri = SoilTextureTriangle(system_name="USDA")
tri.load_dataframe(example_df)
classified = tri.classify()
fig, ax = tri.plot(size_by="BD", cmap="viridis")
CLI
soiltextureplot list-systems
soiltextureplot classify data.csv -o classified.csv
soiltextureplot plot data.csv --size-by BD -o triangle.png
soiltextureplot run data.csv -o classified.csv -f triangle.png
Documentation
Full package docs are available on GitHub Pages:
Data Format
Your CSV file should contain soil texture data with percentages of sand, silt, and clay. The percentages should sum to 100% for each sample.
Example data format:
sample_id,sand,silt,clay
S1,65,20,15
S2,70,24,6
S3,75,21,4
Supported Classification Systems
USDA (United States Department of Agriculture)
The standard USDA soil texture classification system with 12 texture classes.
HYPRES (HYdraulic PRoperties of European Soils)
A European framework for classifying soils based on their hydrologic properties.
Web Application
The Streamlit web app allows you to:
- Upload CSV files with soil texture data
- Map columns to sand, silt, and clay percentages
- Visualize data on interactive texture triangles
- Customize plot appearance
Notebook Workflows (Pilot)
During the Marimo pilot, both notebook paths are supported:
- Jupyter notebook remains available at
texture_plot.ipynb - Marimo notebook copy is available at
notebooks/texture_plot_marimo.py - Keep existing
nbqachecks for.ipynbfiles during this phase
Run the Marimo notebook:
uv run marimo edit notebooks/texture_plot_marimo.py
Run the existing Jupyter notebook:
uv run jupyter notebook texture_plot.ipynb
Development
# Setup
uv sync --group dev
# Install git pre-commit hook
uv run pre-commit install
# Run all pre-commit checks on the repository
uv run pre-commit run --all-files
# Run one hook manually (example: ruff)
uv run pre-commit run ruff --all-files
# CI-style check-only quality commands (no auto-fixes)
uv run ruff format --check .
uv run ruff check .
uv run ty check src app
# Run tests
uv run pytest
# Build
uv build
# Publish (after updating version in pyproject.toml)
uv publish
Release Automation (GitHub Actions)
Publishing is automated via tag-triggered workflows:
v*rc*tags publish to TestPyPIv*.*.*tags are evaluated for PyPI; tags containingrcare skipped by workflow condition
Both workflows verify that the git tag version matches uv version --short before publishing.
Both workflows also run isolated wheel and source-distribution smoke tests (import soiltextureplot) before upload.
For maintainers, full trusted-publishing and release steps are documented in docs/releasing.md.
Acknowledgments
- Built using mpltern for ternary plotting
- Inspired by soil science classification standards
- Streamlit for the web interface
Metadata
Release files for soiltextureplot 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| soiltextureplot-0.1.4.tar.gz | 16.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| soiltextureplot-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.9 kB
Release files / soiltextureplot-0.1.4.tar.gz
| Download URL | soiltextureplot-0.1.4.tar.gz |
|---|---|
| Size | 16.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4c3bf41c0307b32319ae5b171f540413cf4160cf1179d149af9f6653b1daa4cd
|
|
BLAKE2b-256 checksum How to use checksums |
cb3ed44ddcd86f33728fc44086152bc58cd6d3a9ad54484d4c520b6e28adb8d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / soiltextureplot-0.1.4-py3-none-any.whl
| Download URL | soiltextureplot-0.1.4-py3-none-any.whl |
|---|---|
| Size | 15.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a1e2be5a48546a300a19c427152aef8cd7d2634c17c1e1485467f04e22e042b8
|
|
BLAKE2b-256 checksum How to use checksums |
5597204eb012ab1b6db3199fcb2434b3daf246f606e7979ae7f289ae86e2485c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|