2017-02-06 3 views
1

Ich muss ein Dreieck in Python mit Mathplotlib zeichnen.
This ist, wie es schließlich aussehen soll:

Mein Ziel ist es, einmal auf das Dreieck, gezogen einige Punkte auf ihn zu zeichnen.Mathplotlib zeichnen Dreieck mit Farbverlauf füllen

Im Moment kann ich das Dreieck zeichnen gerade fein:

import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 
fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 
ax.add_patch(Polygon([[0,0],[0,1],[1,0]], closed=True,fill=True)) 
ax.set_xlim((0,1)) 
ax.set_ylim((0,1)) 
plt.show() 

Aber ich kann es nur mit einer Farbe füllen. Wie füge ich einen Farbverlauf wie im Bild gezeigt hinzu?

Kann mir jemand helfen?

+1

Ist das eine Hausaufgabe? Hast du schon etwas probiert? Inwieweit helfen dir andere Beispiele und Lösungen nicht? Ist das Problem mit dem Dreieck oder den Punkten oder der Füllung verbunden? Bitte seien Sie spezifischer und fügen Sie den Code hinzu, den Sie bereits haben, damit wir wissen, wo wir Ihnen helfen können. – ImportanceOfBeingErnest

+0

Ihre Bearbeitung spiegelt perfekt, was ich suche. Danke –

Antwort

0

Es gibt eine example on the matplotlib page zeigt, wie Sie einen Clip-Pfad für ein Bild verwenden.
Anpassung dies zu Ihrem Fall würde dies geben:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.path import Path 
from matplotlib.patches import PathPatch 


fig = plt.figure() 
ax = fig.add_subplot(111, aspect='equal') 
path = Path([[0,0],[0,1],[1,0],[0,0]]) 
patch = PathPatch(path, facecolor='none') 
ax.add_patch(patch) 
Z, Z2 = np.meshgrid(np.linspace(0,1), np.linspace(0,1)) 
im = plt.imshow(Z-Z2, interpolation='bilinear', cmap=plt.cm.RdYlGn, 
       origin='lower', extent=[0, 1, 0, 1], 
       clip_path=patch, clip_on=True) 
im.set_clip_path(patch) 
ax.set_xlim((0,1)) 
ax.set_ylim((0,1)) 
plt.show() 

enter image description here

+0

Großartig! Ich danke dir sehr! Wenn ich es gut verstehe, muss ich jetzt die richtige Colormap erstellen. –

+0

Wenn keine der hier aufgeführten Colormaps (http://matplotlib.org/examples/color/colormaps_reference.html) für Sie funktioniert, möchten Sie möglicherweise eine neue erstellen. Dies sollte einfach sein, wenn es nur 3 oder 4 Farben, z.B. [so] (http://stackoverflow.com/a/41988634/4124317). – ImportanceOfBeingErnest

+0

Wenn dies Ihre Frage beantwortet, denken Sie wie gewöhnlich an [Annahme der Antwort] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Wenn nicht, versuchen Sie, Ihre Anforderungen einzugrenzen, damit jemand eine bessere Antwort geben kann. – ImportanceOfBeingErnest

Verwandte Themen