2012-04-26 39 views
20

Este es mi primer programa matplotlib, lo siento por mi ignorancia.diagrama de dispersión en matplotlib

Tengo dos matrices de cadenas. por ejemplo, A = ['test1','test2'] y B = ['test3','test4']. Si existe alguna correlación entre A y B elemento, su valor corr se establecerá en 1.

 test1 | test2 
test3 | 1 | 0 

test4 | 0 | 1 

Ahora, yo quiero dibujar un diagrama de dispersión donde mi eje X va a ser elementos de A, eje Y serán elementos de B y si el valor de correlación es 1, que va a ser marcado en la trama dispersa. ¿como hacer eso?

+5

[¿Qué has probado?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+1

He respondido tu pregunta, pero luego la volví a leer, y no estoy seguro de que lo haya entendido. ¿Son los elementos de A y B realmente cuerdas? ¿Cómo se prueba la correlación de cadenas? Si son valores numéricos, entonces obtendrás una medida de correlación. Según su ejemplo, parece que las listas 'test1' y 'test2'. Pero entonces no está claro para mí qué es exactamente lo que quieres en el diagrama de dispersión. Debo dejar mi respuesta en caso de que sea útil, pero sería útil si me aclaras. – Akavall

+0

Hola, sí, los elementos de A y B son cadenas, que en realidad representan dos nombres de archivo. Genere los valores de correlación de otro programa basado en cierta lógica. – bray

Respuesta

68

Tal vez algo como esto:

import matplotlib.pyplot 
import pylab 

x = [1,2,3,4] 
y = [3,4,8,6] 

matplotlib.pyplot.scatter(x,y) 

matplotlib.pyplot.show() 

EDIT:

Déjame ver si he entendido bien ahora:

Usted tiene:

 test1 | test2 | test3 
test3 | 1 | 0 | 1 

test4 | 0 | 1 | 0 

test5 | 1 | 1 | 0 

ahora quiere represente los valores anteriores en un diagrama de dispersión, de modo que ese valor de 1 esté representado por un punto.

Digamos que los resultados se almacenan en una lista 2-D:

results = [[1, 0, 1], [0, 1, 0], [1, 1, 0]] 

queremos transformar en dos variables, de modo que son capaces de trazar ellos.

Y creo que este código le dará lo que busca:

import matplotlib 
import pylab 


results = [[1, 0, 1], [0, 1, 0], [1, 1, 0]] 

x = [] 
y = [] 

for ind_1, sublist in enumerate(results): 
    for ind_2, ele in enumerate(sublist): 
     if ele == 1: 
      x.append(ind_1) 
      y.append(ind_2)  


matplotlib.pyplot.scatter(x,y) 

matplotlib.pyplot.show() 

en cuenta que yo no tenga que importar pylab, y que tendría que jugar un poco con las etiquetas de los ejes. También esto parece una solución alternativa, y podría haber (probablemente) un método directo para hacer esto.

Cuestiones relacionadas