Problem for reproducing the Pourbaix diagram in Materials Project website

There is a problem reproducing the Pourbaix diagram as shown in web app. It is strange to see domains with cross “X”.

from mp_api.client import MPRester
from pymatgen.analysis.pourbaix_diagram import PourbaixDiagram, PourbaixPlotter
mpr = MPRester('api_key')

pb_entries = mpr.get_pourbaix_entries(chemsys=['Li','Fe','P'])
comp_dict = {'Li':1.0/3,'Fe':1.0/3,'P':1.0/3}
conc_dict = {'Li':1.0,'Fe':2.0/3,'P':2.0/3}
pbd = PourbaixDiagram(pb_entries,filter_solids=True,comp_dict=comp_dict,conc_dict=conc_dict)
pbp = PourbaixPlotter(pbd)
ax = pbp.get_pourbaix_plot(label_domains=False) 

I saw the below Pourbaix diagram

Image

In Materials Project, we saw some thing like

Image

Version

mp_api 0.45.8

Hey @Jeff-oakley the images didn’t embed correctly, would you mind trying to resend those?

I’m seeing a Pourbaix diagram like this from your snippet:

And like this from the website:

Apart from the matplotlib vs plotly differences (the website uses plotly + crystal_toolkit to plot and shade these), they look nearly identical to me. Can you clarify a bit what “X’s” you noticed?

Thank you Aron. How about the one below.

Thanks for sending that - it looks like something is going wrong in the interpolation between nodes on the Pourbaix diagram.

Since I’m not seeing it using the same code as you, can you try installing these versions of the plotting software dependencies to see if that fixes it?
pip install pymatgen==2025.6.14 matplotlib==3.10.6 plotly==6.3.0

Thank you. I have tried exactly the same modules but still have the issue. I copied all my modules in the test conda environment after installing pymatgen, mp_api etc. for your information

Name Version Build Channel

_python_abi3_support 1.0 hd8ed1ab_2 conda-forge
aioitertools 0.12.0 pypi_0 pypi
annotated-types 0.7.0 pypi_0 pypi
anyio 4.10.0 pyhe01879c_0 conda-forge
appnope 0.1.4 pyhd8ed1ab_1 conda-forge
argon2-cffi 25.1.0 pyhd8ed1ab_0 conda-forge
argon2-cffi-bindings 25.1.0 py313hcdf3177_0 conda-forge
arrow 1.3.0 pyhd8ed1ab_1 conda-forge
asttokens 3.0.0 pyhd8ed1ab_1 conda-forge
async-lru 2.0.5 pyh29332c3_0 conda-forge
attrs 25.3.0 pyh71513ae_0 conda-forge
babel 2.17.0 pyhd8ed1ab_0 conda-forge
bcrypt 4.3.0 pypi_0 pypi
beautifulsoup4 4.13.5 pyha770c72_0 conda-forge
bibtexparser 1.4.3 pypi_0 pypi
blake3 1.0.6 pypi_0 pypi
bleach 6.2.0 pyh29332c3_4 conda-forge
bleach-with-css 6.2.0 h82add2a_4 conda-forge
boltons 25.0.0 pypi_0 pypi
boto3 1.40.35 pypi_0 pypi
botocore 1.40.35 pypi_0 pypi
bravado 12.0.1 pypi_0 pypi
bravado-core 6.1.1 pypi_0 pypi
bzip2 1.0.8 h80987f9_6
ca-certificates 2025.9.9 hca03da5_0
cached-property 1.5.2 hd8ed1ab_1 conda-forge
cached_property 1.5.2 pyha770c72_1 conda-forge
cachetools 6.2.0 pypi_0 pypi
certifi 2025.8.3 pypi_0 pypi
cffi 2.0.0 pypi_0 pypi
charset-normalizer 3.4.3 pypi_0 pypi
comm 0.2.3 pyhe01879c_0 conda-forge
contourpy 1.3.3 pypi_0 pypi
cpython 3.13.7 py313hd8ed1ab_100 conda-forge
cryptography 46.0.1 pypi_0 pypi
cycler 0.12.1 pypi_0 pypi
debugpy 1.8.17 py313hc37fe24_0 conda-forge
decorator 5.2.1 pyhd8ed1ab_0 conda-forge
defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge
dnspython 2.8.0 pypi_0 pypi
emmet-core 0.85.0rc0 pypi_0 pypi
exceptiongroup 1.3.0 pyhd8ed1ab_0 conda-forge
executing 2.2.1 pyhd8ed1ab_0 conda-forge
expat 2.7.1 h313beb8_0
filetype 1.2.0 pypi_0 pypi
flatten-dict 0.4.2 pypi_0 pypi
flexcache 0.3 pypi_0 pypi
flexparser 0.4 pypi_0 pypi
fonttools 4.60.0 pypi_0 pypi
fqdn 1.5.1 pyhd8ed1ab_1 conda-forge
h11 0.16.0 pyhd8ed1ab_0 conda-forge
h2 4.3.0 pyhcf101f3_0 conda-forge
hpack 4.1.0 pyhd8ed1ab_0 conda-forge
httpcore 1.0.9 pyh29332c3_0 conda-forge
httpx 0.28.1 pyhd8ed1ab_0 conda-forge
hyperframe 6.1.0 pyhd8ed1ab_0 conda-forge
idna 3.10 pypi_0 pypi
importlib-metadata 8.7.0 pyhe01879c_1 conda-forge
importlib-resources 6.5.2 pypi_0 pypi
invoke 2.2.0 pypi_0 pypi
ipykernel 6.30.1 pyh92f572d_0 conda-forge
ipython 9.5.0 pyhfa0c392_0 conda-forge
ipython_pygments_lexers 1.1.1 pyhd8ed1ab_0 conda-forge
ipywidgets 8.1.7 pyhd8ed1ab_0 conda-forge
isoduration 20.11.0 pyhd8ed1ab_1 conda-forge
jedi 0.19.2 pyhd8ed1ab_1 conda-forge
jinja2 3.1.6 pyhd8ed1ab_0 conda-forge
jmespath 1.0.1 pypi_0 pypi
joblib 1.5.2 pypi_0 pypi
json2html 1.3.0 pypi_0 pypi
json5 0.12.1 pyhd8ed1ab_0 conda-forge
jsonlines 4.0.0 pypi_0 pypi
jsonpointer 3.0.0 py313h8f79df9_2 conda-forge
jsonref 1.1.0 pypi_0 pypi
jsonschema 4.25.1 pyhe01879c_0 conda-forge
jsonschema-specifications 2025.9.1 pyhcf101f3_0 conda-forge
jsonschema-with-format-nongpl 4.25.1 he01879c_0 conda-forge
jupyter 1.1.1 pyhd8ed1ab_1 conda-forge
jupyter-lsp 2.3.0 pyhcf101f3_0 conda-forge
jupyter_client 8.6.3 pyhd8ed1ab_1 conda-forge
jupyter_console 6.6.3 pyhd8ed1ab_1 conda-forge
jupyter_core 5.8.1 pyh31011fe_0 conda-forge
jupyter_events 0.12.0 pyh29332c3_0 conda-forge
jupyter_server 2.17.0 pyhcf101f3_0 conda-forge
jupyter_server_terminals 0.5.3 pyhd8ed1ab_1 conda-forge
jupyterlab 4.4.7 pyhd8ed1ab_0 conda-forge
jupyterlab_pygments 0.3.0 pyhd8ed1ab_2 conda-forge
jupyterlab_server 2.27.3 pyhd8ed1ab_1 conda-forge
jupyterlab_widgets 3.0.15 pyhd8ed1ab_0 conda-forge
kiwisolver 1.4.9 pypi_0 pypi
krb5 1.21.3 h237132a_0 conda-forge
lark 1.2.2 pyhd8ed1ab_1 conda-forge
latexcodec 3.0.1 pypi_0 pypi
libcxx 20.1.8 h8869778_0
libedit 3.1.20250104 pl5321hafb1f1b_0 conda-forge
libffi 3.4.4 hca03da5_1
libmpdec 4.0.0 h80987f9_0
libsodium 1.0.20 h99b78c6_0 conda-forge
libzlib 1.3.1 h5f15de7_0
maggma 0.72.0 pypi_0 pypi
markupsafe 3.0.2 py313ha9b7d5b_1 conda-forge
matplotlib 3.10.6 pypi_0 pypi
matplotlib-inline 0.1.7 pyhd8ed1ab_1 conda-forge
mistune 3.1.4 pyhcf101f3_0 conda-forge
mongomock 4.3.0 pypi_0 pypi
monotonic 1.6 pypi_0 pypi
monty 2025.3.3 pypi_0 pypi
mp-api 0.45.9 pypi_0 pypi
mpcontribs-client 5.10.4 pypi_0 pypi
mpmath 1.3.0 pypi_0 pypi
msgpack 1.1.1 pypi_0 pypi
narwhals 2.5.0 pypi_0 pypi
nbclient 0.10.2 pyhd8ed1ab_0 conda-forge
nbconvert-core 7.16.6 pyh29332c3_0 conda-forge
nbformat 5.10.4 pyhd8ed1ab_1 conda-forge
ncurses 6.5 hee39554_0
nest-asyncio 1.6.0 pyhd8ed1ab_1 conda-forge
networkx 3.5 pypi_0 pypi
notebook 7.4.5 pyhd8ed1ab_0 conda-forge
notebook-shim 0.2.4 pyhd8ed1ab_1 conda-forge
numpy 2.3.3 pypi_0 pypi
openssl 3.5.3 h5503f6c_0 conda-forge
orjson 3.11.3 pypi_0 pypi
overrides 7.7.0 pyhd8ed1ab_1 conda-forge
packaging 25.0 pypi_0 pypi
palettable 3.3.3 pypi_0 pypi
pandas 2.3.2 pypi_0 pypi
pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge
paramiko 4.0.0 pypi_0 pypi
parso 0.8.5 pyhcf101f3_0 conda-forge
pexpect 4.9.0 pyhd8ed1ab_1 conda-forge
pickleshare 0.7.5 pyhd8ed1ab_1004 conda-forge
pillow 11.3.0 pypi_0 pypi
pint 0.25 pypi_0 pypi
pip 25.2 pyhc872135_0
platformdirs 4.4.0 pyhcf101f3_0 conda-forge
plotly 6.3.0 pypi_0 pypi
prometheus_client 0.23.1 pyhd8ed1ab_0 conda-forge
prompt-toolkit 3.0.52 pyha770c72_0 conda-forge
prompt_toolkit 3.0.52 hd8ed1ab_0 conda-forge
psutil 7.1.0 py313h6535dbc_0 conda-forge
ptyprocess 0.7.0 pyhd8ed1ab_1 conda-forge
pure_eval 0.2.3 pyhd8ed1ab_1 conda-forge
pybtex 0.25.1 pypi_0 pypi
pycparser 2.22 pyh29332c3_1 conda-forge
pydantic 2.11.9 pypi_0 pypi
pydantic-core 2.33.2 pypi_0 pypi
pydantic-settings 2.10.1 pypi_0 pypi
pydash 8.0.5 pypi_0 pypi
pygments 2.19.2 pyhd8ed1ab_0 conda-forge
pyisemail 2.0.1 pypi_0 pypi
pymatgen 2025.6.14 pypi_0 pypi
pymatgen-io-validation 0.1.2 pypi_0 pypi
pymongo 4.10.1 pypi_0 pypi
pynacl 1.6.0 pypi_0 pypi
pyobjc-core 11.0 py313hb6afeec_0 conda-forge
pyobjc-framework-cocoa 11.0 py313hb6afeec_0 conda-forge
pyparsing 3.2.4 pypi_0 pypi
python 3.13.7 hc28b8d9_100_cp313
python-dateutil 2.9.0.post0 pypi_0 pypi
python-dotenv 1.1.1 pypi_0 pypi
python-fastjsonschema 2.21.2 pyhe01879c_0 conda-forge
python-gil 3.13.7 h4df99d1_100 conda-forge
python-json-logger 2.0.7 pyhd8ed1ab_0 conda-forge
python_abi 3.13 1_cp313
pytz 2025.2 pypi_0 pypi
pyyaml 6.0.2 py313ha9b7d5b_2 conda-forge
pyzmq 27.1.0 py312hd65ceae_0 conda-forge
readline 8.3 h0b18652_0
referencing 0.36.2 pyh29332c3_0 conda-forge
requests 2.32.5 pypi_0 pypi
requests-futures 1.0.2 pypi_0 pypi
rfc3339-validator 0.1.4 pyhd8ed1ab_1 conda-forge
rfc3986-validator 0.1.1 pyh9f0ad1d_0 conda-forge
rfc3987-syntax 1.1.0 pyhe01879c_1 conda-forge
rpds-py 0.27.1 py313h80e0809_1 conda-forge
ruamel-yaml 0.18.15 pypi_0 pypi
ruamel-yaml-clib 0.2.12 pypi_0 pypi
s3transfer 0.14.0 pypi_0 pypi
scipy 1.16.2 pypi_0 pypi
semantic-version 2.10.0 pypi_0 pypi
send2trash 1.8.3 pyh31c8845_1 conda-forge
sentinels 1.1.1 pypi_0 pypi
setuptools 78.1.1 py313hca03da5_0
simplejson 3.20.1 pypi_0 pypi
six 1.17.0 pypi_0 pypi
smart-open 7.3.1 pypi_0 pypi
sniffio 1.3.1 pyhd8ed1ab_1 conda-forge
soupsieve 2.8 pyhd8ed1ab_0 conda-forge
spglib 2.6.0 pypi_0 pypi
sqlite 3.50.2 h79febb2_1
sshtunnel 0.4.0 pypi_0 pypi
stack_data 0.6.3 pyhd8ed1ab_1 conda-forge
swagger-spec-validator 3.0.4 pypi_0 pypi
sympy 1.14.0 pypi_0 pypi
tabulate 0.9.0 pypi_0 pypi
terminado 0.18.1 pyh31c8845_0 conda-forge
tinycss2 1.4.0 pyhd8ed1ab_0 conda-forge
tk 8.6.15 hcd8a7d5_0
tomli 2.2.1 pyhe01879c_2 conda-forge
tornado 6.5.2 py313hcdf3177_1 conda-forge
tqdm 4.67.1 pypi_0 pypi
traitlets 5.14.3 pyhd8ed1ab_1 conda-forge
types-python-dateutil 2.9.0.20250822 pyhd8ed1ab_0 conda-forge
typing-extensions 4.15.0 h396c80c_0 conda-forge
typing-inspection 0.4.1 pypi_0 pypi
typing_extensions 4.15.0 pyhcf101f3_0 conda-forge
typing_utils 0.1.0 pyhd8ed1ab_1 conda-forge
tzdata 2025.2 pypi_0 pypi
ujson 5.11.0 pypi_0 pypi
uncertainties 3.2.3 pypi_0 pypi
uri-template 1.3.0 pyhd8ed1ab_1 conda-forge
urllib3 2.5.0 pypi_0 pypi
wcwidth 0.2.13 pyhd8ed1ab_1 conda-forge
webcolors 24.11.1 pyhd8ed1ab_0 conda-forge
webencodings 0.5.1 pyhd8ed1ab_3 conda-forge
websocket-client 1.8.0 pyhd8ed1ab_1 conda-forge
wheel 0.45.1 py313hca03da5_0
widgetsnbextension 4.0.14 pyhd8ed1ab_0 conda-forge
wrapt 1.17.3 pypi_0 pypi
xz 5.6.4 h80987f9_1
yaml 0.2.5 h925e9cb_3 conda-forge
zeromq 4.3.5 h888dc83_9 conda-forge
zipp 3.23.0 pyhd8ed1ab_0 conda-forge
zlib 1.3.1 h5f15de7_0

Thanks, the only thing I can suggest is using python 3.11 or 3.12 (preferred, what I used) - most of our software isn’t yet tested for python 3.13, so I can’t guarantee that you’ll get consistent behavior

Thanks. I will stick with python3.12 then. I just tested python3.12 together with pip install pymatgen==2025.6.14 matplotlib==3.10.6 plotly==6.3.0. It works well.

Great to hear!