2010-11-24 8 views
42

que quiero trazar varios conjuntos de datos en el mismo gráfico de dispersión:matplotlib: múltiples conjuntos de datos en el mismo gráfico de dispersión

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

Lo anterior sólo muestra el más reciente scatter()

También he intentado:

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

Su sobreimpresión en la misma línea. –

Respuesta

63

Usted necesita una referencia a un objeto de mantener Axes dibujo en la misma trama secundaria.

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

¿Qué significa '111' en' fig.add_subplot (111) '? – Temak

+0

Es la disposición de los subgrafos dentro de este gráfico. El primer número es cuántas filas de subparcelas; el segundo número es cuántas columnas de subparcelas; el tercer número es el subgráfico del que está hablando ahora. En este caso, hay una fila y una columna de subgrafos (es decir, un subgrafo) y los ejes hablan sobre el primero de ellos. Algo como fig.add_subplot (3,2,5) sería la subparcela inferior izquierda en una grilla de tres filas y dos columnas. –

4

no sé, que funciona bien para mí. comandos exactos:

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

Mis conjuntos de datos se superponen :) –

4

me encontré con esta pregunta, ya que tenía exacta el mismo problema. Aunque respuesta aceptada funciona bien, pero con la versión matplotlib 2.1.0, es bastante sencillo tener dos gráficos de dispersión en una parcela sin necesidad de utilizar una referencia 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() 
Cuestiones relacionadas