3D Plot in Python welche Lib ?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

Hallo Leute,

Ich werde am Ende einen 4D Array haben, dieser ist so aufgebaut: 3 Koordinaten mit einem zugehörigen Wert zwischen 0-100.
Bei den Werten handelt es sich um Ultraschallmessungen, eines Körpers mit einer Bohrung drinnen, da wo ich eine Bohrung habe ist der Wert zwischen 0-100 sehr hoch und da wo ich keine Bohrung habe gegen 0..
Nun möchte ich die Bohrung in 3D plotten, ich kenne bis jetzt nur mytplotlib, ist es damit möglich denn hier steht dass es ziemlich limitiert ist: https://python-graph-gallery.com/3d/

Meine Idee ist es am Ende halt alle z.B. alle Punkte mit einer Wert größer als 20 zu Plotten, oder mit einer Farbkodierung abhängig vom Wert.
Habt ihr Erfahrungen?

Am Ende soll das ganze ungefähr so aussehen:
Bild

VIELEN DANKE FÜR JEGLICHE HILFE!!!
Benutzeravatar
pixewakb
User
Beiträge: 1407
Registriert: Sonntag 24. April 2011, 19:43

Wenn ich dem glauben darf, dann kann matplotlib das auch. Ich habe damit keine (!) Erfahrung.

https://jakevdp.github.io/PythonDataSci ... tting.html

Ferner (Google-Suche):

https://www.mantidproject.org/MantidPlo ... _in_Python

https://plot.ly/python/3d-surface-plots/

Wenn Du mich fragst: Frag konkret bei stackoverflow nach, da könnte es Leute geben, die so etwas auch mal machen...
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

Danke für die schneller Hilfe, ja hab jetzt mal bei stackoverflow gefragt!
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

a fool with a tool is still a fool, www.magben.de, YouTube
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

Danke hab ich auch schon gesehen, bin den ganzen Tag dabei Malawi zu verstehen und zu nutzen !
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

@MagBen hast du eigentlich verstanden wie der 3d Numpy array in dem Beispiel aufgebaut ist? Ich verstehe die Test Datei auch nicht wirklich bzw weiß ich nicht, wie ich sie lese..: http://graphics.stanford.edu/data/volda ... ain.tar.gz' .

Hab irgendwie Probleme damit zu verstehen, wie mayavi numpy arrays haben möchte und vor allem visualisiert..
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Code: Alles auswählen

### Read the data in a numpy 3D array #########################################
import numpy as np
import os

data = np.array([np.fromfile(os.path.join('MRbrain', 'MRbrain.%i' % i),
                                        dtype='>u2') for i in range(1, 110)])
data.shape = (109, 256, 256)
data = data.T
# data.shape -> (256, 256, 109)
In dem .tar file sind 109 Dateien a 128kb. Diese werden nacheinander in ein Numpy Array eingelesen.
Das Array bekommt die Form (109, 256, 256) und wird dann transponiert und hat dann die Form (256, 256, 109).
Die Werte sind 16bit unsigned
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Habe mal ein wenig rumgespielt
Bild
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Würde dir nicht ein 3D Scatterplot weiterhelfen?
Für jeden Wert in deiner 3D-Matrix der größer ist als zB 10 einen Punkt setzen?
https://matplotlib.org/gallery/mplot3d/ ... atter3d-py
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
g123
User
Beiträge: 25
Registriert: Donnerstag 11. Januar 2018, 15:36

Hallo Thomas,

vielen Dank! Hab mittlerweile schon ein paar Test Dateien in Mayavi visualisiert.
Den Scatterplot von Matplotlib habe ich mir auch schon angeguckt, aber ich denke mayavi ist hier im Vorteil oder?
1. Lässt sich bei Mayavi die Transparenz der Punkte abhängig zum Skalaren Wert einstellen
2. Könnte ich mit numpy.where() Punkte ausfiltern.

Was mir jedoch noch Probleme bereitet ist, dass die Darstellung nicht smooth aussieht, ich besitze Kugeln an den gegeben Koordinaten, jedoch 'vermischt' das ganze nicht miteinander. Entweder Point3d() ist nicht die richtige Funktion für meinen Fall oder ich brauche einen passenden marching cubes Algorithmus..
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

1. ich habe mich noch nicht mit Mayavi beschäftigt, kann ich nichts zu sagen
2. wenn du mit "filtern" meinst, Werte in der Matrix die z.B. unterhalb eines bestimmten Schwellwertes liegen, auf 0 zu setzen, Ja.
idx = np.where(bild < 20)
bild[idx] = 0
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Benutzeravatar
pixewakb
User
Beiträge: 1407
Registriert: Sonntag 24. April 2011, 19:43

Kam gerade mittels Python Weekly - ist m. E. etwas anderes, als was du da suchst, passt aber noch zum Thema. Möglicherweise für Dich von Interesse:

"mne-python
MNE-Python software is an open-source Python package for exploring, visualizing, and analyzing human neurophysiological data such as MEG, EEG, sEEG, ECoG, and more. It includes modules for data input/output, preprocessing, visualization, source estimation, time-frequency analysis, connectivity analysis, machine learning, and statistics."

https://github.com/mne-tools/mne-python
Antworten