Wie in den plot ein gradient color line matplotlib?
Um es in allgemeiner form, ich bin auf der Suche nach einem Weg, um an mehreren Punkten mit einem gradient color line mit matplotlib, und ich bin mir nicht finden es überall.
Um genauer zu sein, ich bin zeichnen eines 2D-random-walk mit einer color line. Aber, wie die Punkte eine relevante Sequenz, die ich möchte, zu betrachten, das Grundstück und sehen, wo die Daten gezogen hat. Ein Farbverlauf, farbige Linie würde den trick tun. Oder eine Linie mit den allmählich wechselnden Transparenz.
Ich versuche nur zu verbessern, die vizualization meiner Daten. Überprüfen Sie heraus dieses schöne Bild, produziert von der ggplot2-Paket von R. ich bin auf der Suche nach den gleichen in matplotlib. Danke.
Ich weiß nicht von irgendeiner Weise der Verschwörung Verläufe in den Zeilen, die mit matplotlib, obwohl es schön wäre. Kann ich schlage vor, Sie zu verwenden, pycairo statt, dort können Sie Farbverläufe für Sie sicher und Holen Sie eine Menge mehr Kontrolle über die Handlung. Allerdings verlieren Sie einige der Komfort von matplotlib, wie Achse und die automatische Daten-Bereich: - (
sind Sie sicher? 🙁 kennt Ihr irgendwelche Pläne zu integrieren, dass die Funktion? Ich habe noch nie gehört, pycairo. können Sie mir einige Hinweise? @mathematische.Kaffee: ja, das ist es, was ich meine. der code kann eine einfache Daten-set (einige Punkte und das ist alles)
Vielleicht können Sie versuchen, so etwas wie dieser.
Ich bin mir immer noch nicht klar, was Sie wollen, aber ich habe eine Vermutung und veröffentlichte eine Antwort unten. Wenn das ist nicht, was Sie suchen, bitte helfen Sie mir zu verstehen, was Sie versuchen zu tun, (können Sie ein Beispiel geben?).
InformationsquelleAutor PDRX | 2011-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe vor kurzem eine Frage beantwortet mit einem ähnlichen Antrag ( erstellen von über 20 einzigartige Legende Farben mit matplotlib ). Dort habe ich gezeigt, dass Sie können die Karte der Kreislauf der Farben, die Sie brauchen, um zu Plotten Ihre Zeilen, um eine Farbe anzeigen. Sie können das gleiche Verfahren verwenden, bekommen Sie eine bestimmte Farbe für jedes paar von Punkten.
Sollten Sie wählen Sie die Farbe-Karte sorgfältig, da die Farbe übergänge entlang der Linie erscheinen mag drastisch, wenn die Farbe der Karte ist bunt.
Alternativ können Sie auch ändern Sie den alpha-Wert von jedem Linien-segment im Bereich von 0 bis 1.
Enthalten im code-Beispiel unten ist eine routine (
highResPoints
) erweitern Sie die Anzahl der Punkte, die Ihr random-walk hat, denn wenn man zu wenige Punkte haben, die übergänge scheinen mag drastisch. Dieses Stück code war inspiriert von einem anderen letzten Antwort, die ich zur Verfügung gestellt: https://stackoverflow.com/a/8253729/717357Diese Abbildung zeigt die vier Fälle:
Das ist ein nettes feature, Yann! Ich nicht wusste, über die Farbe der Karte. Aber wenn Sie entfernen Sie die Zeile "ax.plot(x,y)" es wird besser (weniger Rauschen). Noch, ich kann sehen, dass 2 sich überlagernden Farben in jedem segment. Kann man das lösen? Diese Art der Visualisierung kann ein wenig helfen, wenn ich eine 2-Farb-anzeigen zum Beispiel. Jedoch, was ich suchte, war eine glatte Farb-übergang auch zwischen den Punkten. Noch besser (aber vielleicht zu viel verlangt) wäre nur einer Farbe, aber mit einer alpha-Faktor für die Transparenz reibungslos ändern sich auch. Ich habe gerade bearbeitete meine Frage. Überprüfen Sie heraus das Bild.
Danke!!! Ihre Antwort war eine große Hilfe. Man kann sehen, Sie sind komfortabel mit matplotlib. Die "highres" - Ansatz ist clever. Als ich sah, dass Ihre erste Antwort, die ich sofort obwohl schaffen zusätzliche Punkte, die progressive Einstufung als gut, aber Sie Tat es in einer Sekunde! Ich war hopping gab es einige buit-in-Funktion in matplotlib, das könnte das problem umgehen, und speichern Sie mir aus schreiben Sie den code, und haben es immer rund! Denke, ich werde mit ihm Leben müssen.
wenn ich
x = [1.0, 2.0, 3.0]
undy = [1.0, 3.0, 8.0]
dieser code wird nicht mitTraceback (most recent call last): File ".../gradient", line 89, in <module>; xHiRes,yHiRes = highResPoints(x,y,RESFACT); File ".../gradient", line 67, in highResPoints; while rPos > rtot[rcount+1]: IndexError: list index out of range
. Wie man dieses Problem beheben?InformationsquelleAutor Yann
Beachten Sie, dass wenn Sie viele Punkte, Berufung
plt.plot
für jede Strecke kann sehr langsam sein. Es ist effizienter, verwenden Sie eine LineCollection Objekt.Mithilfe der
colorline
Rezept können Sie das folgende tun:InformationsquelleAutor unutbu
Zu lang für einen Kommentar, so wollte nur bestätigen, dass
LineCollection
ist viel schneller als eine for-Schleife in Zeile Teilsegmente.den LineCollection Methode ist viel schneller in meinen Händen.
Wir testen iteratives planen gegen LineCollection Methode oben.
1 loops, best of 1: 13.4 s per loop
1 loops, best of 1: 532 ms per loop
Upsampling Ihre Linie für einen besseren Farbverlauf, wie der aktuell ausgewählte Antwort liefert, ist immer noch eine gute Idee, wenn Sie wollen einen weichen Verlauf, und Sie haben nur ein paar Punkte.
InformationsquelleAutor alexbw
Habe ich meine Lösung mit pcolormesh
Jedes Liniensegment gezeichnet wird mit einem Rechteck, das sich aus der Interpolation zwischen den Farben an jedem Ende. Also es ist wirklich die Interpolation der Farbe, aber wir passieren die Dicke der Linie.
InformationsquelleAutor spacether
War ich mit @alexbw code zum zeichnen einer Parabel. Es funktioniert sehr gut. Ich bin ich in der Lage, ändern Sie die Farben für die Funktion. Für die Berechnung, es dauerte etwa 1min und 30sec. Ich war mit Intel i5, 2gb Grafik, 8gb ram.
Dem code ist Folgendes:
Und das Ergebnis ist:
https://i.stack.imgur.com/gL9DG.png
InformationsquelleAutor Djordje Vukcevic