MatPlotlib-Farbbalken mit falschem Bereich in der 3D-Oberfläche
Posted: 20 Jan 2025, 15:48
Ich versuche, mithilfe von Oberflächenplot und Flächenfarben in Matplotlib einen Wert um die Einheitskugel herum darzustellen, aber meine Farbleiste zeigt die normalisierten Werte anstelle der tatsächlichen Werte an. Wie kann ich das beheben, damit die Farbleiste den richtigen Bereich hat?
Dies gibt 0,20009725794516225 und 0,49936395079063567 als Min. und Max. in den Drucken aus, aber Sie können sehen, dass der Bereich der Farbleiste im folgenden Bild 0 bis 1 beträgt.

Wie kann ich dieses Problem beheben und dafür sorgen, dass die Farbleiste die richtigen Farben hat?
Code: Select all
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import cm
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, figsize = (10, 14))
# Make data
n_points = 500
r = 1
u = np.linspace(0, 2 * np.pi, n_points)
v = np.linspace(0, np.pi, n_points)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_wireframe(x, y, z, color="grey", alpha = 0.1)
data = np.random.uniform(0.2, 0.5, n_points)
heatmap = np.array(np.meshgrid(data, data))[1]
ax.set_aspect("equal")
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
colormap = cm.viridis
normaliser = mpl.colors.Normalize(vmin=np.min(heatmap), vmax=np.max(heatmap))
print(np.min(heatmap))
print(np.max(heatmap))
surf = ax.plot_surface(
x, y, z,
facecolors=colormap(normaliser(heatmap)), shade=False)
fig.colorbar(surf, shrink=0.5, aspect=10, label="Singlet yield", pad = 0.05, norm = normaliser)
plt.show()

Wie kann ich dieses Problem beheben und dafür sorgen, dass die Farbleiste die richtigen Farben hat?