diff --git a/src/pymatgen/analysis/phase_diagram.py b/src/pymatgen/analysis/phase_diagram.py
index c5632f82812..57c751bad70 100644
--- a/src/pymatgen/analysis/phase_diagram.py
+++ b/src/pymatgen/analysis/phase_diagram.py
@@ -2781,18 +2781,36 @@ def _create_plotly_fill(self):
ys.append(y)
zs.append(z)
- traces += [
- go.Mesh3d(
- x=xs,
- y=ys,
- z=zs,
- opacity=0.05,
- alphahull=-1,
- flatshading=True,
- hoverinfo="skip",
- color=next(fillcolors),
- )
- ]
+ if _idx == 1:
+ traces += [
+ go.Mesh3d(
+ x=xs,
+ y=ys,
+ z=zs,
+ opacity=0.05,
+ alphahull=-1,
+ flatshading=True,
+ hoverinfo="skip",
+ color=next(fillcolors),
+ legendgroup="facets",
+ showlegend=True,
+ name="Hull Surfaces (toggle to access points easier)",
+ )
+ ]
+ else:
+ traces += [
+ go.Mesh3d(
+ x=xs,
+ y=ys,
+ z=zs,
+ opacity=0.05,
+ alphahull=-1,
+ flatshading=True,
+ hoverinfo="skip",
+ color=next(fillcolors),
+ legendgroup="facets",
+ )
+ ]
return traces
@@ -2974,7 +2992,6 @@ def get_marker_props(coords, entries):
x, y, z, texts, energies, uncertainties = [], [], [], [], [], []
is_stable = [entry in self._pd.stable_entries for entry in entries]
-
for coord, entry, stable in zip(coords, entries, is_stable):
energy = round(self._pd.get_form_energy_per_atom(entry), 3)
@@ -2988,13 +3005,12 @@ def get_marker_props(coords, entries):
formula = comp.reduced_formula
clean_formula = htmlify(formula)
- label = f"{clean_formula} ({entry_id})
{energy} eV/atom"
-
+ label = f"{clean_formula} ({entry_id})
Formation energy: {energy} eV/atom
"
if not stable:
e_above_hull = round(self._pd.get_e_above_hull(entry), 3)
if e_above_hull > self.show_unstable:
continue
- label += f" ({e_above_hull:+} eV/atom)"
+ label += f" Energy Above Hull: ({e_above_hull:+} eV/atom)"
energies.append(e_above_hull)
else:
uncertainty = 0
@@ -3002,23 +3018,39 @@ def get_marker_props(coords, entries):
if hasattr(entry, "correction_uncertainty_per_atom") and label_uncertainties:
uncertainty = round(entry.correction_uncertainty_per_atom, 4)
label += f"
(Error: +/- {uncertainty} eV/atom)"
-
uncertainties.append(uncertainty)
energies.append(energy)
- texts.append(label)
-
if self._dim == 3 and self.ternary_style == "2d":
- for el, axis in zip(self._pd.elements, [x, y, z]):
- axis.append(entry.composition[el])
+ label += "
"
+ total_sum_el = sum(entry.composition[el] for el, _axis in zip(self._pd.elements, range(self._dim)))
+ for el, axis in zip(self._pd.elements, range(self._dim)):
+ _cartesian_positions = [x, y, z]
+ _cartesian_positions[axis].append(entry.composition[el])
+ label += f"
{el}: {round(entry.composition[el]/total_sum_el, 6)}"
+ elif self._dim == 3 and self.ternary_style == "3d":
+ x.append(coord[0])
+ y.append(coord[1])
+ z.append(energy)
+
+ label += "
"
+ total_sum_el = sum(entry.composition[el] for el, _axis in zip(self._pd.elements, range(self._dim)))
+ for el, _axis in zip(self._pd.elements, range(self._dim)):
+ label += f"
{el}: {round(entry.composition[el]/total_sum_el, 6)}"
+ elif self._dim == 4:
+ x.append(coord[0])
+ y.append(coord[1])
+ z.append(coord[2])
+
+ label += "
"
+ total_sum_el = sum(entry.composition[el] for el, _axis in zip(self._pd.elements, range(self._dim)))
+ for el, _axis in zip(self._pd.elements, range(self._dim)):
+ label += f"
{el}: {round(entry.composition[el]/total_sum_el, 6)}"
else:
x.append(coord[0])
y.append(coord[1])
- if self._dim == 3:
- z.append(energy)
- elif self._dim == 4:
- z.append(coord[2])
+ texts.append(label)
return {"x": x, "y": y, "z": z, "texts": texts, "energies": energies, "uncertainties": uncertainties}
diff --git a/src/pymatgen/apps/battery/plotter.py b/src/pymatgen/apps/battery/plotter.py
index f8725ef25e6..e73576f27d8 100644
--- a/src/pymatgen/apps/battery/plotter.py
+++ b/src/pymatgen/apps/battery/plotter.py
@@ -133,7 +133,7 @@ def get_plotly_figure(
**kwargs: passed to plotly.graph_objects.Layout
"""
font_dict = font_dict or {"family": "Arial", "size": 24, "color": "#000000"}
- hover_temp = "Voltage : %{y:.2f} V"
+ hover_temp = "Voltage (V): %{y:.2f}
x: %{x:.3f}"
data = []
working_ion_symbols = set()