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()
50
demandé sur Austin Richardson 2010-11-24 21:35:46

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

entrez la description de l'image ici

76
répondu nate c 2014-03-14 07:57:17

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()
9
répondu bro-grammer 2017-12-09 11:36:43

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()
4
répondu Steve Tjoa 2010-11-24 18:57:42

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

1
répondu MaVe 2016-07-12 12:14:46