Diagrama de dispersión con una enorme cantidad de datos

Me gustaría usar Matplotlib para generar un gráfico de dispersión con una enorme cantidad de datos (alrededor de 3 millones de puntos). De hecho, he 3 con los vectores de la misma dimensión y puedo usar para graficar de la siguiente manera.

import matplotlib.pyplot as plt
import numpy as np
from numpy import *
from matplotlib import rc
import pylab
from pylab import * 
fig = plt.figure()
fig.subplots_adjust(bottom=0.2)
ax = fig.add_subplot(111)
plt.scatter(delta,vf,c=dS,alpha=0.7,cmap=cm.Paired)

Nada especial en realidad. Pero se necesita mucho tiempo para generar realidad (estoy trabajando en mi MacBook Pro de 4 GB de RAM con Python 2.7 y Matplotlib 1.0). Es allí cualquier manera de mejorar la velocidad?

Más allá de decenas de miles de puntos, algún tipo de ráster representación gráfica podría ser preferible tanto para la velocidad y la facilidad de uso real.
Usted debe elegir una respuesta y se marca como aceptado.

OriginalEl autor Nicola Vianello | 2010-11-02

3 respuestas

  1. 7

    Usted podría tomar el heatmap método que se muestra aquí. En este ejemplo, el color representa la cantidad de datos en la papelera, no el valor de la mediana de la dS de la matriz, pero que debe ser fácil de cambiar. Más tarde, si usted está interesado.

    pero, el mapa de calor no es una buena idea para la detección de anomalías en el uso de diagrama de dispersión.
    Buen punto. Usted puede, sin embargo, la superposición de un gráfico de dispersión (de outliers) en la parte superior del mapa de calor y obtener lo mejor de ambos.

    OriginalEl autor Paul

  2. 19

    A menos que su gráfica es enorme, muchos de esos 3 millones de puntos van a solapar.
    (Un 400×600 imagen sólo tiene 240 MIL puntos…)

    Así que lo más fácil sería tomar una muestra de decir, 1000 puntos, a partir de los datos:

    import random
    delta_sample=random.sample(delta,1000)

    y sólo parcela.

    Por ejemplo:

    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    import numpy as np
    import random
    fig = plt.figure()
    fig.subplots_adjust(bottom=0.2)
    ax = fig.add_subplot(111)
    N=3*10**6
    delta=np.random.normal(size=N)
    vf=np.random.normal(size=N)
    dS=np.random.normal(size=N)
    idx=random.sample(range(N),1000)
    plt.scatter(delta[idx],vf[idx],c=dS[idx],alpha=0.7,cmap=cm.Paired)
    plt.show()

    Diagrama de dispersión con una enorme cantidad de datos

    O, si usted necesita prestar más atención a los valores atípicos, entonces tal vez usted podría bin sus datos a través de np.histogram, y luego componer un delta_sample el cual cuenta con representantes de cada bin.

    Desgraciadamente, cuando se utiliza np.histogram creo que no hay ninguna manera fácil de asociar contenedores con puntos de datos individuales. Un simple, pero la solución aproximada es utilizar la ubicación de un punto en o en la bandeja de borde a sí mismo como un proxy para los puntos en que:

    xedges=np.linspace(-10,10,100)
    yedges=np.linspace(-10,10,100)
    zedges=np.linspace(-10,10,10)
    hist,edges=np.histogramdd((delta,vf,dS), (xedges,yedges,zedges))
    xidx,yidx,zidx=np.where(hist>0)
    plt.scatter(xedges[xidx],yedges[yidx],c=zedges[zidx],alpha=0.7,cmap=cm.Paired)
    plt.show()

    Diagrama de dispersión con una enorme cantidad de datos

    Para completar la solución,si se muestra de forma aleatoria hacer N veces para obtener la imagen completa de la situación.
    En realidad, yo también creo que el agrupamiento de los datos podría ser la manera más fácil. Puede usted por favor, me sugieren cómo hacerlo (la conservación de la correspondencia betweens las ubicaciones de los tres vectores? Me refiero a una especie de 3D histograma)
    muchas gracias. En realidad creo que no me explique mi auto correctamente. Me gustaría crear un mapa de color para que los colores indica los valores promedio de las variables de z en el recipiente (xbin,ybin) con el fin de trazar como una imshow. Esto es diferente creo que con respecto a la np.histogramdd. Tal vez alguien me podría ayudar

    OriginalEl autor unutbu

  3. 8

    Lo que trata pyplot.hexbin? Se genera una especie de “mapa de calor” basado en la densidad de puntos en un determinado número de contenedores.

    OriginalEl autor conjectures

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *