2012-04-26 12 views
20

To jest mój pierwszy program matplotlib, tak przepraszam za moją niewiedzę.scatter plot in matplotlib

Mam dwie tablice ciągów. powiedzmy: A = ['test1','test2'] i B = ['test3','test4']. Jeśli istnieje jakaś korelacja między elementem A a B, ich wartość corr zostanie ustawiona na 1.

 test1 | test2 
test3 | 1 | 0 

test4 | 0 | 1 

Teraz chcę narysować wykres punktowy, gdzie moja oś X będzie elementy A, oś Y będzie elementy B i jeśli wartość korelacji jest 1, zostanie on oznaczony rozproszonego działki. jak to zrobić?

+5

[co próbowaliście?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+1

Odpowiedziałem na twoje pytanie, ale potem przeczytałem je ponownie, a ja nie jestem pewien, czy to zrozumiałem. Czy elementy A i B naprawdę są ciągami? Jak test korelacji łańcuchów? Jeśli są wartościami liczbowymi, otrzymasz tylko jedną miarę korelacji. Z twojego przykładu wydaje się, że listy "test1" i "test2". Ale nie jest dla mnie jasne, co dokładnie chcesz rozproszyć fabułę. Nadal zostawię moją odpowiedź na wypadek, gdyby była przydatna, ale pomogłoby, gdybyś to wyjaśnił. – Akavall

+0

Cześć, tak elementy A i B są ciągami, które w rzeczywistości reprezentują dwie nazwy plików. Wygenerowałem wartości korelacji z innego programu na podstawie pewnej logiki. – bray

Odpowiedz

68

Może coś takiego:

import matplotlib.pyplot 
import pylab 

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

matplotlib.pyplot.scatter(x,y) 

matplotlib.pyplot.show() 

EDIT:

Pozwól mi zobaczyć, czy cię rozumiem poprawnie teraz:

Masz:

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

test4 | 0 | 1 | 0 

test5 | 1 | 1 | 0 

Teraz chcesz reprezentują powyższe wartości w wykresie rozproszenia, tak że wartość 1 jest reprezentowana przez kropkę.

Powiedzmy, że wyniki są przechowywane w wykazie 2-D:

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

Chcemy przekształcić je w dwóch zmiennych, więc jesteśmy w stanie je wykreślić.

I wierzę ten kod da ci to, czego szukasz:

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

Wskazówka że trzeba importować pylab i trzeba bawić z etykiet osi. Również to wydaje się być robotą dookoła i może być (prawdopodobnie jest) bezpośrednia metoda, aby to zrobić.

Powiązane problemy