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
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()
À 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()
Si, à la place, vous vouliez seulement remplir entre Y2 et Y3:
plt.fill_between(X, Y2,Y3,color='m',alpha=.5)
Cela vous donnerait
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: