Matplotlib remplir entre plusieurs lignes

Je voudrais remplir entre 3 lignes de matplotlib.pyplot mais malheureusement le fill_between me donne l'occasion de remplir entre seulement deux lignes. Toutes les idées sur la façon de traiter ce problème?

Modifier:

Ok, je n'ai pas expliqué ce que je veux dire vraiment puisque je ne peux pas ajouter l'image avec ma réputation actuelle alors peut-être de cette façon:

J'essaie de remplir le polygone délimité par ces lignes et je n'ai aucune idée de comment parce que fill_between me donne l'occasion de remplir seulement la zone entre deux d'entre eux. Sous l'équation de remplissage:

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

Les x et y supérieurs à 0 sont évidents. Je commence l'intrigue à partir de (0,0) mais j'ai encore 3 lignes...

y <= 4- 2x
y <= 3 - 1/2x
y <= 1 - x
23
demandé sur Cœur 2013-05-07 15:08:38

3 réponses

Si vous démarrez l'intrigue au point (0, 0), et donc n'ont pas besoin d'envisager la surface du polygone pas dans le premier quadrant, alors cela devrait faire l'affaire dans cette situation particulière:

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()

entrez la description de l'image ici

33
répondu hooy 2013-05-07 18:54:25

À utiliser fill_between, spécifiez D'abord les valeurs X, que les deux ensembles Y que vous souhaitez "remplir entre". Un exemple est montré ci-dessous:

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()

entrez la description de l'image ici

Si, à la place, vous vouliez seulement remplir entre Y2 et Y3:

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

Cela vous donnerait

entrez la description de l'image ici

21
répondu Hooked 2013-05-07 14:26:13

Calculez simplement les points d'angle du polygone, c'est-à-dire les points où les lignes se croisent. Puis tracez le polygone en utilisant pyplot.remplissez.

Exemple:

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()

Image Résultante: La Figure 1

4
répondu moooeeeep 2013-05-07 20:17:48