Ich VisPy
mit einer Oberfläche zu zeichnen, aber die Funktion scene.visuals.SurfacePlot
hat nur den Parameter color
, ohne den Parameter colormap
. Kann jemand colormap
im Oberflächenplotten verwenden?Wie colormap in VisPy verwendet surfaceplot
Antwort
Momentan scheint es einen bug zu geben, der den colors
Parameter von SurfacePlot nicht funktioniert. Wenn man der Oberfläche alles andere als eine feste Farbe geben möchte, müsste man wahrscheinlich diesen Weg gehen. Es ist also zu diesem Zeitpunkt möglicherweise nicht möglich, den Quellcode zu ändern.
Für das, was es wert ist, glaube ich, die folgenden, wenn dieser Fehler nicht vorhanden war funktionieren würde:
import vispy.plot as vp
from vispy import color
fig = vp.Fig(show=False)
cnorm = z/abs(np.amax(z))
colors = color.get_colormap("hsl").map(cnorm).reshape(z.shape + (-1,))
fig[0, 0].surface(z, x=x, y=y, colors=colors)
Grundsätzlich Sie die Daten normalisieren ein zu zwischen 0 und 1, und ordnen dann diese Werte Farbkarte. Dadurch wird ein 3D-Array mit RGB-Farben zurückgegeben, die Sie an den Parameter colors
von SurfacePlot übergeben können.
Die Farben müssen auf einer Vertexbasis gesetzt werden, dh Vertex_colors. Eine Möglichkeit, dies zu erreichen, ist wie folgt;
import vispy.plot as vp
from vispy import color
from vispy.util.filter import gaussian_filter
import numpy as np
z = np.random.normal(size=(250, 250), scale=200)
z[100, 100] += 50000
z = gaussian_filter(z, (10, 10))
fig = vp.Fig(show=False)
cnorm = z/abs(np.amax(z))
c = color.get_colormap("hsl").map(cnorm).reshape(z.shape + (-1,))
c = c.flatten().tolist()
c=list(map(lambda x,y,z,w:(x,y,z,w), c[0::4],c[1::4],c[2::4],c[3::4]))
#p1 = fig[0, 0].surface(z, vertex_colors=c) # why doesn't vertex_colors=c work?
p1 = fig[0, 0].surface(z)
p1.mesh_data.set_vertex_colors(c) # but explicitly setting vertex colors does work?
fig.show()
Beachten Sie die Verwendung des expliziten Setter set_vertex_colors hat gut funktioniert. Leider (möglicherweise ein Fehler) beim Übergeben c
an surface(z, vertex_colors=c)
lief ohne Fehler, aber änderte nicht die pro Vertex Farben. Fazit: Verwenden Sie explizit set_vertex_colors
.
- 1. Invert Colormap in Matplotlib
- 2. Wie kann Vispy-Graph in PyQt eingebettet werden?
- 3. Benutzerdefinierte Colormap in Python
- 4. Wie kann man Colormap auswählen?
- 5. Wie mache ich Colormap-Effekt in Javafx?
- 6. matplotlib Standard colormap Nutzung
- 7. Python Matplotlib Colormap
- 8. Kontrastfarbe für Colormap
- 9. Oberflächendiagramm colormap python
- 10. Wie man viridis in Matplotlib verwendet 1.4
- 11. Versucht, eine Colormap in Python zu plotten
- 12. seaborn color_palette als matplotlib colormap
- 13. Erstellen einer Colormap Legend in Matplotlib
- 14. Mit colormap mit Bokeh Streu
- 15. ändern colormap in SymPy des `` plot3d``
- 16. Pyplot imshow ColorMap funktioniert nicht
- 17. Matplotlib 3D-Plot Verwendung Colormap
- 18. Matlab Colormap symmetrisch über 1
- 19. Extrahieren Sie Matplotlib Colormap im Hex-Format
- 20. Colormap für Fehlerbalken in x-y Streudiagramm mit Matplotlib
- 21. Plot-Histogramm mit Farben aus Colormap
- 22. Matplotlib colormap: Maximale Anzahl der Farben
- 23. Forcieren einer Colormap, um quadratisch zu sein
- 24. : So verwenden depth_first_visit, Ausgabe mit ColorMap
- 25. Ausführen einer Funktion, wenn die Colormap ändert
- 26. redblue colormap mit Übergangszeit bei Null
- 27. Manuelle Einrichtung Colormap für Farbbalken Matplotlib
- 28. So definieren Sie ein transparentes Element in Colormap
- 29. konnte keine colormap Eintrag in Xlib mit XFreeColors befreien()
- 30. Hat jemand die Parula Colormap in Matplotlib gemacht?
Ich habe diesen Weg versucht, aber ich habe eine Fehlermeldung sagte 'Farben müssen 2D sein, wenn indiziert ist keine' Meinst du ich sollte dieses Skript zu meinem Code hinzufügen? Hier ist mein Code: 'fig = vp.Fig (show = Falsch) cnorm = z/abs (amax (z)) Farben = color.get_colormap (" cool "). Map (cnorm) .reshape (z.shape + (-1,)) p1 = scene.visuals.SurfacePlot (z = solver0 (I, f, c, bc, Lx, Ly, nx, ny, dt, 0, user_action = Keine), shading = 'smooth' , Farben = Farben) ' –
Richtig. Du bist auf den Fehler gestoßen, den ich erwähnt habe. Die Dokumentation besagt, dass das Farbfeld 2D sein muss, aber der Code erfordert, dass es 3D ist. Wenn Sie jedoch das Array auf 2D reduzieren, wird ein Fehler auftreten, durch den versucht wird, auf eine zugrunde liegende Struktur zuzugreifen, die noch nicht initialisiert wurde. Also, wie ich schon sagte. Sie müssen wahrscheinlich darauf warten, dass es behoben wird, oder reparieren Sie es selbst. Sie könnten versuchen, das Volume-Objekt in vispy.scene, die ein cmap-Argument – orodbhen
in Ordnung ist. Vielen Dank. Ich werde es versuchen :) –