2011-01-30 10 views
8

Zebrałem pewne dane w pliku tekstowym i chcę utworzyć boxplot. Ale ten plik danych zawiera na przykład wiersze o zmiennej długości.Boxplot z danymi o zmiennej długości w matplotlib

1,2, 2,3, 3,0, 4,5
1,1, 2,2, 2,9

równe długości może po prostu wykonać
pw = numpy.loadtxt ("./ learning.dat")
matplotlib.boxplot (PW.T);

Jak obsługiwać linie danych o zmiennej długości?

+0

W jaki sposób należy interpretować dane? Czy wszystkie wartości powinny być łączone w jednej tablicy 1D? –

+0

Nie, chciałbym mieć boxplots dla kolumn pliku danych. Więc co zrobiłbym w przypadku równej długości byłby m razy n tablicy, a następnie boxplot transpozycji, prawda? – Kabbo

+0

Dokumenty mówią "x jest tablicą lub ciągiem wektorów". Musisz więc odczytać dane i przetłumaczyć je na szereg wektorów, po jednym w każdym pudełku. Wygląda na to, że możesz go odczytać za pomocą modułu CSV Pythona. –

Odpowiedz

16

Po prostu użyj listy tablic lub list. boxplot będzie wykonywać dowolną sekwencję (cóż, cokolwiek, co ma wartość __len__, nie będzie działać z generatorami itp.).

Np .:

import matplotlib.pyplot as plt 
x = [[1.2, 2.3, 3.0, 4.5], 
    [1.1, 2.2, 2.9]] 
plt.boxplot(x) 
plt.show() 

enter image description here

Jeśli pytasz jak czytać w twoich danych, istnieje wiele sposobów na to, co chcesz. Jako prosty przykład:

import matplotlib.pyplot as plt 
import numpy as np 

def arrays_from_file(filename): 
    """Builds a list of variable length arrays from a comma-delimited text file""" 
    output = [] 
    with open(filename, 'r') as infile: 
     for line in infile: 
      line = np.array(line.strip().split(','), dtype=np.float) 
      output.append(line) 
    return output 

plt.boxplot(arrays_from_file('test.txt')) 
plt.show() 
2

Można również zrobić wykres typu boxplot w Plot.ly, używając API Pythona czy tylko GUI. Zrobiłem this graph, które można zrobić w przeglądarce lub z Python API tak:

box1 = {'y': [1.2, 2.3, 3.0, 4.5], 
'type': 'box'} 
box2 = {'y': [1.1, 2.2, 2.9], 
'type': 'box'} 
response = py.plot([box1, box2]) 
url = response['url'] 
filename = response['filename'] 

Pełne ujawnienie: Jestem w zespole Plotly.

enter image description here

+0

woah, beautiful! –

Powiązane problemy