A toolkit for visualizations in materials informatics
Project description
pymatviz
A toolkit for visualizations in materials informatics.
If you use
pymatvizin your research, see how to cite. Check out 33 existing papers usingpymatvizfor inspiration!
Installation
pip install pymatviz
See pyproject.toml for available extras like pip install 'pymatviz[brillouin]' to render 3d Brillouin zones.
API Docs
See the /api page.
Usage
See the Jupyter notebooks under examples/ for how to use pymatviz. PRs with additional examples are welcome! 🙏
| matbench_dielectric_eda.ipynb | Launch Codespace | |
| mp_bimodal_e_form.ipynb | Launch Codespace | |
| matbench_perovskites_eda.ipynb | Launch Codespace | |
| mprester_ptable.ipynb | Launch Codespace |
Periodic Table
See pymatviz/ptable/figures.py. The module supports heatmaps, heatmap splits (multiple values per element), histograms, scatter plots and line plots. All visualizations are interactive through Plotly and support displaying additional data on hover.
[!WARNING] Version 0.16.0 of
pymatvizdropped the matplotlib-based functions inptable_matplotlib.pyin https://github.com/janosh/pymatviz/pull/270. Please use theplotly-based functions shown below instead which have feature parity, interactivity and better test coverage.
Dash app using ptable_heatmap_plotly()
See examples/mprester_ptable.ipynb.
Phonons
phonon_bands(bands_dict) |
phonon_dos(doses_dict) |
|---|---|
phonon_bands_and_dos(bands_dict, doses_dict) |
phonon_bands_and_dos(single_bands, single_dos) |
Composition Clustering
cluster_compositions(compositions, properties, embedding_method, projection_method, n_components=2) |
cluster_compositions(compositions, properties, embedding_method, projection_method, n_components=3) |
|---|---|
Visualize 2D or 3D relationships between compositions and properties using multiple embedding and dimensionality reduction techniques:
Embedding methods: One-hot encoding of element fractions, Magpie features (elemental properties), Matscholar element embeddings, MEGNet element embeddings
Dimensionality reduction methods: PCA (linear), t-SNE (non-linear), UMAP (non-linear), Isomap (non-linear), Kernel PCA (non-linear)
Example usage:
import pymatviz as pmv
from pymatgen.core import Composition
compositions = ("Fe2O3", "Al2O3", "SiO2", "TiO2")
# Create embeddings
embeddings = pmv.cluster.composition.one_hot_encode(compositions)
comp_emb_map = dict(zip(compositions, embeddings, strict=True))
# Plot with optional property coloring
fig = pmv.cluster_compositions(
compositions=comp_emb_map,
properties=[1.0, 2.0, 3.0, 4.0], # Optional property values
prop_name="Property", # Optional property label
embedding_method="one-hot", # or "magpie", "matscholar_el", "megnet_el", etc.
projection_method="pca", # or "tsne", "umap", "isomap", "kernel_pca", etc.
show_chem_sys="shape", # works best for small number of compositions; "color" | "shape" | "color+shape" | None
n_components=2, # or 3 for 3D plots
)
fig.show()
Structure Clustering
On the roadmap but no ETA yet.
Structure
See pymatviz/structure/figures.py.
structure_3d(hea_structure) |
structure_3d(lco_supercell) |
|---|---|
structure_2d(six_structs) |
structure_3d(six_structs) |
Interactive Widgets
See pymatviz/widgets. Interactive 3D structure, molecular dynamics trajectory and composition visualization widgets for Jupyter, Marimo, and VSCode notebooks, powered by anywidget and MatterViz (https://github.com/janosh/matterviz). Supports pymatgen Structure, ASE Atoms, and PhonopyAtoms, as well as ASE, pymatgen and plain Python trajectory formats.
from pymatviz import StructureWidget, CompositionWidget, TrajectoryWidget
from pymatgen.core import Structure, Composition
# Interactive 3D structure visualization
structure = Structure.from_file("structure.cif")
struct_widget = StructureWidget(structure=structure)
# Interactive composition visualization
composition = Composition("Fe2O3")
comp_widget = CompositionWidget(composition=composition)
# Interactive trajectory visualization
trajectory1 = [struct1, struct2, struct3] # List of structures
traj_widget1 = TrajectoryWidget(trajectory=trajectory1)
trajectory2 = [{"structure": struct1, "energy": 1.0}, {"structure": struct2, "energy": 2.0}, {"structure": struct3, "energy": 3.0}] # dicts with "structure" and property values
traj_widget2 = TrajectoryWidget(trajectory=trajectory2)
Examples:
[!TIP] Checkout the ✅ MatterViz VSCode extension for using the same viewers directly in VSCode/Cursor editor tabs for rendering local and remote files: marketplace.visualstudio.com/items?itemName=janosh.matterviz
Importing pymatviz auto-registers all widgets for their respective sets of supported objects via register_matterviz_widgets().
Brillouin Zone
brillouin_zone_3d(cubic_struct) |
brillouin_zone_3d(hexagonal_struct) |
|---|---|
brillouin_zone_3d(monoclinic_struct) |
brillouin_zone_3d(orthorhombic_struct) |
X-Ray Diffraction
See pymatviz/xrd.py.
xrd_pattern(pattern) |
xrd_pattern({key1: patt1, key2: patt2}) |
|---|---|
xrd_pattern(struct_dict, stack="horizontal") |
xrd_pattern(struct_dict, stack="vertical") |
Radial Distribution Functions
element_pair_rdfs(pmg_struct) |
element_pair_rdfs({"A": struct1, "B": struct2}) |
|---|---|
Coordination
See pymatviz/coordination/figures.py.
coordination_hist(struct_dict) |
coordination_hist(struct_dict, by_element=True) |
|---|---|
coordination_vs_cutoff_line(struct_dict, strategy=None) |
coordination_vs_cutoff_line(struct_dict, strategy=None) |
Sunburst
See pymatviz/sunburst.py.
spacegroup_sunburst([65, 134, 225, ...]) |
chem_sys_sunburst(["FeO", "Fe2O3", "LiPO4", ...]) |
|---|---|
chem_env_sunburst(single_struct) |
chem_env_sunburst(multiple_structs) |
Treemap
See pymatviz/treemap/chem_sys.py.
Note: For
color_by="coverage"the package must have coverage data (e.g. runpytest --cov=<pkg> --cov-report=xmland pass the resulting.coveragefile tocoverage_data_file).
Rainclouds
rainclouds(two_key_dict) |
rainclouds(three_key_dict) |
|---|---|
Sankey
See pymatviz/sankey.py.
sankey_from_2_df_cols(df_perovskites) |
sankey_from_2_df_cols(df_space_groups) |
|---|---|
Bar Plots
See pymatviz/bar.py.
spacegroup_bar([65, 134, 225, ...]) |
spacegroup_bar(["C2/m", "P-43m", "Fm-3m", ...]) |
|---|---|
Histograms
elements_hist(compositions, log=True, bar_values='count') |
histogram({'key1': values1, 'key2': values2}) |
|---|---|
Scatter Plots
See pymatviz/scatter.py.
density_scatter(xs, ys, ...) |
density_scatter_with_hist(xs, ys, ...) |
|---|---|
density_hexbin(xs, ys, ...) |
density_hexbin_with_hist(xs, ys, ...) |
Uncertainty
qq_gaussian(y_true, y_pred, y_std) |
qq_gaussian(y_true, y_pred, y_std: dict) |
|---|---|
error_decay_with_uncert(y_true, y_pred, y_std) |
error_decay_with_uncert(y_true, y_pred, y_std: dict) |
Classification
See pymatviz/classify/confusion_matrix.py.
confusion_matrix(conf_mat, ...) |
confusion_matrix(y_true, y_pred, ...) |
|---|---|
See pymatviz/classify/curves.py.
roc_curve_plotly(targets, probs_positive) |
precision_recall_curve_plotly(targets, probs_positive) |
|---|---|
How to cite pymatviz
See citation.cff or cite the Zenodo record using the following BibTeX entry:
@software{riebesell_pymatviz_2022,
title = {Pymatviz: visualization toolkit for materials informatics},
author = {Riebesell, Janosh and Yang, Haoyu and Goodall, Rhys and Baird, Sterling G.},
date = {2022-10-01},
year = {2022},
doi = {10.5281/zenodo.7486816},
url = {https://github.com/janosh/pymatviz},
note = {10.5281/zenodo.7486816 - https://github.com/janosh/pymatviz},
urldate = {2023-01-01}, % optional, replace with your date of access
version = {0.8.2}, % replace with the version you use
}
Papers using pymatviz
Sorted by number of citations, then year. Last updated 2026-01-19. Auto-generated from Google Scholar. Manual additions via PR welcome.
- C Zeni, R Pinsler, D Zügner et al. (2023). Mattergen: a generative model for inorganic materials design (cited by 166)
- L Barroso-Luque, M Shuaibi, X Fu et al. (2024). Open materials 2024 (omat24) inorganic materials dataset and models (cited by 136)
- J Riebesell, REA Goodall, P Benner et al. (2023). Matbench Discovery--A framework to evaluate machine learning crystal stability predictions (cited by 117)
- C Chen, DT Nguyen, SJ Lee et al. (2024). Accelerating computational materials discovery with machine learning and cloud high-performance computing: from large-scale screening to experimental validation (cited by 81)
- M Giantomassi, G Materzanini (2024). Systematic assessment of various universal machine‐learning interatomic potentials (cited by 44)
- K Li, AN Rubungo, X Lei et al. (2025). Probing out-of-distribution generalization in machine learning for materials (cited by 29)
- AA Naik, C Ertural, P Benner et al. (2023). A quantum-chemical bonding database for solid-state materials (cited by 22)
- A Kapeliukha, RA Mayo (2025). MOSAEC-DB: a comprehensive database of experimental metal–organic frameworks with verified chemical accuracy suitable for molecular simulations (cited by 15)
- Y Zhou, X He, Z Li (2025). Scientists' First Exam: Probing Cognitive Abilities of MLLM via Perception, Understanding, and Reasoning (cited by 6)
- HH Li, Q Chen, G Ceder (2024). Voltage Mining for (De) lithiation-Stabilized Cathodes and a Machine Learning Model for Li-Ion Cathode Voltage (cited by 4)
- F Therrien, JA Haibeh, D Sharma (2025). OBELiX: A curated dataset of crystal structures and experimentally measured ionic conductivities for lithium solid-state electrolytes (cited by 3)
- A Onwuli, KT Butler, A Walsh (2024). Ionic species representations for materials informatics (cited by 3)
- N Tuchinda, CA Schuh (2025). Grain Boundary Segregation and Embrittlement of Aluminum Binary Alloys from First Principles (cited by 2)
- A Peng, MY Guo (2025). The OpenLAM Challenges (cited by 1)
- N Tuchinda, CA Schuh (2025). A grain boundary embrittlement genome for substitutional cubic alloys (cited by 1)
- Giulio Benedini, Antoine Loew, Matti Hellstrom et al. (2025). Universal Machine Learning Potential for Systems with Reduced Dimensionality
- Yuan Chiang, Tobias Kreiman, Elizabeth Weaver et al. (2025). MLIP Arena: Advancing Fairness and Transparency in Machine Learning Interatomic Potentials through an Open and Accessible Benchmark Platform
- Orion Cohen, Janosh Riebesell, Rhys Goodall et al. (2025). TorchSim: An efficient atomistic simulation engine in PyTorch
- Alin Marin Elena, Prathami Divakar Kamath, Théo Jaffrelot Inizan et al. (2025). Machine learned potential for high-throughput phonon calculations of metal—organic frameworks
- Matthew K. Horton, Patrick Huck, Ruo Xi Yang et al. (2025). Accelerated data-driven materials science with the Materials Project
- Aaron D. Kaplan, Runze Liu, Ji Qi et al. (2025). A Foundational Potential Energy Surface Dataset for Materials
- Matthew C. Kuner, Aaron D. Kaplan, Kristin A. Persson et al. (2025). MP-ALOE: An r2SCAN dataset for universal machine learning interatomic potentials
- Anyang Peng, Xinzijian Liu, Ming-Yu Guo et al. (2025). The OpenLAM Challenges: LAM Crystal Philately competition
- Ali Ramlaoui, Martin Siron, Inel Djafar et al. (2025). LeMat-Traj: A Scalable and Unified Dataset of Materials Trajectories for Atomistic Modeling
- Fei Shuang, Zixiong Wei, Kai Liu et al. (2025). Universal machine learning interatomic potentials poised to supplant DFT in modeling general defects in metals and random alloys
- Yingheng Tang, Wenbin Xu, Jie Cao et al. (2025). MatterChat: A Multi-Modal LLM for Material Science
- Liming Wu, Wenbing Huang, Rui Jiao et al. (2025). Siamese Foundation Models for Crystal Structure Prediction
- K Yan, M Bohde, A Kryvenko (2025). A Materials Foundation Model via Hybrid Invariant-Equivariant Architectures
- RA Mayo (2025). Generalizable classification of crystal structure error types using graph attention networks
- Daniel W. Davies, Keith T. Butler, Adam J. Jackson et al. (2024). SMACT: Semiconducting Materials by Analogy and Chemical Theory
- Hui Zheng, Eric Sivonxay, Rasmus Christensen et al. (2024). The ab initio non-crystalline structure database: empowering machine learning to decode diffusivity
- Ilyes Batatia, Philipp Benner, Yuan Chiang et al. (2023). A foundation model for atomistic materials chemistry
- Jack Douglas Sundberg (2022). A New Framework for Material Informatics and Its Application Toward Electride-Halide Material Systems
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 pymatviz-0.17.4.tar.gz.
File metadata
- Download URL: pymatviz-0.17.4.tar.gz
- Upload date:
- Size: 223.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94748fbc706c2a90f7052c3c128cc9a33d35c86969ac05ca14ff2b3c79888616
|
|
| MD5 |
916a5e2b7863cfc71455bb6312255a5f
|
|
| BLAKE2b-256 |
64387d2f9c7aadb0014c9524e6056b4426f022eb3774711499b2a7861d2a0807
|
File details
Details for the file pymatviz-0.17.4-py3-none-any.whl.
File metadata
- Download URL: pymatviz-0.17.4-py3-none-any.whl
- Upload date:
- Size: 248.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9628d6b39b4d343376390845e12c1429859b39c8288f86fff1b340508adc70f2
|
|
| MD5 |
cc91bcc5ab0f659d4080a14c68a0a0b0
|
|
| BLAKE2b-256 |
9f69864361b6c503ee7656ef170a241d4d5184556dab4383f09fde87b9fec1a3
|