ich bin noch recht jungfräulich in Python unterwegs. Ich hab bereits im Internet recherchiert in der Annahme mein Problem wäre ein Standardfall in Python, aber irgendwie hab ich mich da geirrt oder bin zu blöd richtig zu suchen.
Folgende Situation: Ich habe eine 2D-Intensitätsverteilung als Messwertmatrix. Man kann sich das wie ein Graustufenbild vorstellen. Ich möchte jetzt allerdings keine Darstellung als Bild, sondern die gemessenen Intensitätswerte als 3D-Scatterplot. D. h. in der MxN-Matrix habe möchte die M-Dimension auf der X-Achse, die N-Dimension auf der Y-Achse und die Intensitätsverteilung als Z-Wert punktweise dargestellt haben (siehe hierzu auch angehängte Grafiken).
Da die Originalmessdaten als Bild vorliegen, habe ich das in ImageJ schon so dargestellt bekommen (siehe intensity_distro für die Originaldaten und wunsch_darstellung für das was ich letztlich erreichen möchte).
Da ich allerdings einfach etwas Freiheit haben möchte, was die Verteilung der Daten auf den Achsen angeht, möchte ich das Ganze in Python umsetzen. Und hier scheitere ich momentan. Ich habe mit plot_surface zumindest schon so was ähnliches hinbekommen (siehe surface_plot_python), allerdings möchte ich hier keine Oberfläche sehen, sondern nur die Datenpunkte selbst.
Hat da jemand eine Idee?
Anhänglich ist noch ein Code-Schnippsel, sowie drei Bilder von dem was ich haben möchte und dem was ich bis jetzt habe. Nebenfrage: Gibt es eine Möglichkeit auf das Meshgrid zu verzichten, sodass ich direkt auf der X-/Y-Achse die Werte aus demX/Y-Array angezeigt bekomme (die Werte entsprechen jeweils einer Länge)? Und wie bekomme ich das Grid aus?
Merci
Phtagen
Code: Alles auswählen
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from skimage import io
data = np.genfromtxt('/path_to_my_data/corr.txt', delimiter = ' ')
X = data[0, 1:]
Y = data[1:, 0]
Z = data[1:, 1:]
nx = data[0,1:].size
ny = data[1:,0].size
npx = np.linspace(0,1,nx)
npy= np.linspace(0,1,ny)
xv, yv = np.meshgrid(npx, npy)
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
ax.plot_surface(xv, yv, Z)
ax.set_xlabel('$t_{low}$')
ax.set_ylabel('$t_{hi}$')
ax.set_zlabel('$p_{ges}$')
plt.show()


