MatPlotLib: plusieurs ensembles de données sur le même nuage de points
Je veux tracer plusieurs ensembles de données sur le même nuage de points:
cases = scatter(x[:4], y[:4], s=10, c='b', marker="s")
controls = scatter(x[4:], y[4:], s=10, c='r', marker="o")
show()
Ce qui précède ne montre que le plus récent scatter()
J'ai aussi essayé:
plt = subplot(111)
plt.scatter(x[:4], y[:4], s=10, c='b', marker="s")
plt.scatter(x[4:], y[4:], s=10, c='r', marker="o")
show()
4 réponses
Vous avez besoin d'une référence à un objet Axes pour continuer à dessiner sur la même sous-intrigue.
import matplotlib.pyplot as plt
x = range(100)
y = range(100,200)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.scatter(x[:4], y[:4], s=10, c='b', marker="s", label='first')
ax1.scatter(x[40:],y[40:], s=10, c='r', marker="o", label='second')
plt.legend(loc='upper left');
plt.show()

Je suis tombé sur cette question car j'avais exactement le même problème. Bien que la réponse acceptée fonctionne bien, mais avec la version matplotlib 2.1.0, Il est assez simple d'avoir deux diagrammes de dispersion dans un tracé sans utiliser une référence à Axes
import matplotlib.pyplot as plt
plt.scatter(x,y, c='b', marker='x', label='1')
plt.scatter(x, y, c='r', marker='s', label='-1')
plt.legend(loc='upper left')
plt.show()
Je ne sais pas, ça marche bien pour moi. Commandes exactes:
import scipy, pylab
ax = pylab.subplot(111)
ax.scatter(scipy.randn(100), scipy.randn(100), c='b')
ax.scatter(scipy.randn(100), scipy.randn(100), c='r')
ax.figure.show()
Vous pouvez aussi le faire facilement dans les Pandas, si vos données sont représentées dans un Dataframe, comme décrit ici:
Http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html#scatter-plot