web-dev-qa-db-fra.com

MatPlotLib: plusieurs jeux de données sur le même diagramme de dispersion

Je veux tracer plusieurs ensembles de données sur le même diagramme de dispersion:

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 la plus récente 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()
60
Austin Richardson

Vous avez besoin d'une référence à un objet Axes pour continuer à dessiner sur la même sous-parcelle.

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

enter image description here

95
nate c

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 de matplotlib 2.1.0, il est assez simple d’avoir deux diagrammes de dispersion dans un même 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()
15
Sohaib Farooqi

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()
5
Steve Tjoa

Vous pouvez également le faire facilement dans les pandas, si vos données sont représentées dans un cadre de données, comme décrit ici:

http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html#scatter-plot

1
MaVe