2017-03-07 10 views
7

Mam zestaw danych, który zawiera atrybut x, y i mogą być drukowane na powierzchni x-y.Czy wykres plumów matplotlib jest powolny dla dużej liczby danych?

Początkowo użyć kodu

df.plot(kind='scatter', x='x', y='y', alpha=0.10, s=2) 
plt.gca().set_aspect('equal') 

Kod jest dość szybkie z danych o wielkości 50000

Ostatnio używam nowszej zbiór danych, o wielkości około 2500000 A wykres punktowy staje znacznie wolniej.

Chcę wiedzieć, czy jest to oczekiwane zachowanie i czy jest coś, co mogę zrobić, aby poprawić szybkość fabuły?

+3

Jest to oczywiście co najmniej liniowy pod względem liczby punktów. W zależności od rozmiaru znacznika, wyświetlacza i rozdzielczości, nie mogę sobie wyobrazić, aby tak wiele punktów miało jakikolwiek sens. Naturalne podejście: upuść próbki swoich ogromnych danych (wydrukuj tylko 10% losowo wybranych). Może to być jeszcze ważniejsze, gdy zaczniesz drukować fabułę w formatach opartych na wektorach. ** Edycja: ** Jestem bardzo pewny, że użycie alfa powoduje to bardzo powoli. Jeśli chcesz emulować trochę wykresu gęstości (przez użycie alfa/cieniowania), istnieją oczywiście lepsze podejścia, ale nie ma wystarczającej ilości informacji. – sascha

+0

Kolejną sugestią jest to, że możesz stworzyć obraz oparty na pikselu. Znacząco zmniejsza to zużycie pamięci i szybkość. –

+1

Czy to naprawdę pytanie * "Hej, zwiększyłem liczbę punktów o współczynnik 50, a moja szybkość kreślenia nagle jest 50 razy wolniejsza." Czy ktoś może podać mi przyczynę? – ImportanceOfBeingErnest

Odpowiedz

2

Tak, jest. Powodem tego jest fakt, że wykres rozrzutu ponad tysiąca punktów ma niewielki sens, więc nikt nie zadał sobie trudu, by go zoptymalizować. Lepiej skorzystaj z innej reprezentacji danych:

  • Mapa cieplna, jeśli punkty są rozmieszczone w różnych miejscach. Niech komórki termowizyjne będą całkiem małe
  • Narysuj krzywą, która jest zbliżona do rozkładu, może skorelować twój y z twoim x. Pamiętaj, aby podać pewne wartości ufności lub opisać dystrybucję w inny sposób; dla mnie na przykład budowanie box-with-whiskers z y dla każdego x (lub zakresu x) i umieszczanie ich na tej samej siatce zwykle działa całkiem dobrze.
  • Zredukuj swój zbiór danych. @asascha w komentarzach sugeruje losowe próbkowanie, a to zdecydowanie dobry pomysł. W zależności od Twoich danych, być może istnieje lepszy sposób na wybór reprezentatywnych punktów.
+0

Dobre rekomendacje. Jeśli chodzi o podejście oparte na mapie ciepła/sieci, [ta dyskusja @ SO jest również godna] (http://stackoverflow.com/questions/7470288/matplotlib-pcolor-very-slow-alternatives). – sascha

+0

Tak. Robię także inne spisy, takie jak wykres gęstości i inne. Po prostu podczas eksploracji danych chcesz wykreślić dane na wiele sposobów. – cqcn1991

+0

Jak zasugerowałbyś układanie mapy podobnej do mapy, na której ściany są podane przez, powiedzmy, 1000000 punktów danych? – Kyle

Powiązane problemy