2010-11-24 2 views
42

voglio tracciare più set di dati sullo stesso grafico a dispersione:matplotlib: set di dati multipli sulla stessa dispersione trama

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

Quanto sopra mostra solo il più recente scatter()

Ho anche provato:

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

sua sovrastampa sulla stessa linea. –

risposta

63

Hai bisogno di un riferimento a un oggetto Axes per mantenere il disegno sulla stessa sottotrama.

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

Che cosa significa '111' in' fig.add_subplot (111) '? – Temak

+0

È la disposizione dei sottografi all'interno di questo grafico. Il primo numero indica quante righe di sottotrame; il secondo numero indica quante colonne di sottotrame; il terzo numero è il sottografo di cui stai parlando ora. In questo caso, c'è una riga e una colonna di sottografi (ad esempio un sottografo) e gli assi parlano del primo di essi. Qualcosa come fig.add_subplot (3,2,5) sarebbe la sottotramma in basso a sinistra in una griglia di tre righe e due colonne. –

4

Non lo so, tutto funziona bene per me. i comandi esatti:

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

I miei set di dati erano sovrapposti :) –

4

mi sono imbattuto in questa domanda, come ho avuto esatto stesso problema. Sebbene risposta accettato funziona bene ma con matplotlib versione 2.1.0, è piuttosto semplice avere due grafici a dispersione in una trama senza utilizzare un riferimento a 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()