2010-11-24 25 views
42

que je veux tracer plusieurs séries de données sur le même diagramme de dispersion:Matplotlib: ensembles de données multiples 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 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() 
+1

Son surimpressions sur la même ligne. –

Répondre

63

Vous avez besoin d'une référence à un objet Axes de garder le dessin sur la même intrigue secondaire.

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

+4

Que signifie '111' dans' fig.add_subplot (111) '? – Temak

+0

C'est la disposition des sous-graphes dans ce graphique. Le premier nombre est le nombre de lignes de sous-placettes; le deuxième nombre est le nombre de colonnes de sous-placettes; le troisième chiffre est le sous-graphique dont vous parlez maintenant. Dans ce cas, il y a une ligne et une colonne de sous-graphes (c'est-à-dire un sous-graphe) et les axes parlent du premier d'entre eux. Quelque chose comme fig.add_subplot (3, 2, 5) serait le sous-champ inférieur gauche dans une grille de trois lignes et deux colonnes. –

4

Je ne sais pas, cela fonctionne très 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() 
+0

Mes jeux de données se chevauchaient :) –

4

je suis tombé sur cette question comme je l'avais exacte 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 une parcelle 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()