it-swarm.com.de

Matplotlib füllen zwischen mehreren Zeilen

Ich möchte in matplotlib.pyplot zwischen 3 Zeilen einfügen, aber leider das fill_between gibt mir die Möglichkeit, nur zwischen zwei Zeilen zu füllen. Irgendwelche Ideen, wie man damit umgeht?

Bearbeiten:

Ok, ich habe nicht erklärt, was ich wirklich meine, da ich das Bild mit meinem aktuellen Ruf nicht hinzufügen kann, also vielleicht so:

Ich versuche, das durch diese Linien begrenzte Polygon auszufüllen, und ich habe keine Ahnung, wie, weil fill_between mir die Möglichkeit gibt, nur den Bereich zwischen zwei davon auszufüllen. Unterhalb der Füllgleichung:

y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x
y >= 0
x >= 0

das x und y größer als 0 ist offensichtlich. Ich beginne die Handlung mit (0,0), habe aber noch 3 Zeilen ...

y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x
26
Magnar

Wenn Sie den Plot in Punkt (0, 0) starten und daher die Fläche des Polygons nicht im ersten Quadranten berücksichtigen müssen, sollte dies in dieser speziellen Situation der Trick sein:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,10,0.1)

# The lines to plot
y1 = 4 - 2*x
y2 = 3 - 0.5*x
y3 = 1 -x

# The upper Edge of polygon (min of lines y1 & y2)
y4 = np.minimum(y1, y2)

# Set y-limit, making neg y-values not show in plot
plt.ylim(0, 5)

# Plotting of lines
plt.plot(x, y1,
         x, y2,
         x, y3)

# Filling between line y3 and line y4
plt.fill_between(x, y3, y4, color='grey', alpha='0.5')
plt.show()

enter image description here

37
sodd

Benutzen fill_between , geben Sie zuerst die X-Werte an, dann die beiden Y-Sätze, zwischen denen Sie "füllen" möchten. Ein Beispiel ist unten gezeigt:

import pylab as plt
import numpy as np

X  = np.linspace(0,3,200)
Y1 = X**2 + 3
Y2 = np.exp(X) + 2
Y3 = np.cos(X)

plt.plot(X,Y1,lw=4)
plt.plot(X,Y2,lw=4)
plt.plot(X,Y3,lw=4)

plt.fill_between(X, Y1,Y2,color='k',alpha=.5)
plt.fill_between(X, Y1,Y3,color='y',alpha=.5)

plt.show()

enter image description here

Wenn Sie stattdessen nur zwischen Y2 und Y3 füllen wollten:

plt.fill_between(X, Y2,Y3,color='m',alpha=.5)

das würde dir geben

enter image description here

29
Hooked

Berechnen Sie einfach die Eckpunkte des Polygons, d. H. Die Punkte, an denen sich die Linien schneiden. Zeichnen Sie dann das Polygon mit pyplot.fill .

Beispiel:

import matplotlib.pyplot as plt

# define corner points
x = [1,2,1,0]
y = [2,1,0,1]

# plot
plt.fill(x,y)
plt.show()

resultierendes Bild: Figure 1

5
moooeeeep