web-dev-qa-db-fra.com

Comment tracer les lignes en premier et les points en dernier dans matplotlib

J'ai un tracé simple avec plusieurs ensembles de points et de lignes reliant chaque ensemble. Je veux que les points soient tracés en haut des lignes (pour que la ligne ne s'affiche pas à l'intérieur du point). Indépendamment de l'ordre des appels plot et scatter, ce tracé sort de la même manière, et pas comme je le voudrais. Existe-t-il un moyen simple de le faire?

import math
import matplotlib.pyplot as plt

def poisson(m):
    def f(k):
        e = math.e**(-m)
        f = math.factorial(k)
        g = m**k
        return g*e/f
    return f

R = range(20)
L = list()
means = (1,4,10)
for m in means:
    f = poisson(m)
    L.append([f(k) for k in R])
colors = ['r','b','purple']

for c,P in Zip(colors,L):
    plt.plot(R,P,color='0.2',lw=1.5)
    plt.scatter(R,P,s=150,color=c)

ax = plt.axes()
ax.set_xlim(-0.5,20)
ax.set_ylim(-0.01,0.4)
plt.savefig('example.png')
52
telliott99

Vous devez définir l'ordre Z.

plt.plot(R,P,color='0.2',lw=1.5, zorder=1)
plt.scatter(R,P,s=150,color=c, zorder=2)

Découvrez cet exemple. http://matplotlib.sourceforge.net/examples/pylab_examples/zorder_demo.html

73
pdemarest