Skip to main content

Soil Texture Plot

Streamlit App

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 nbqa checks for .ipynb files 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 TestPyPI
  • v*.*.* tags are evaluated for PyPI; tags containing rc are 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)

Source distribution for soiltextureplot 0.1.4
File Size Uploaded
soiltextureplot-0.1.4.tar.gz 16.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for soiltextureplot 0.1.4
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

0.1.5

2 release files

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page