Utwórz wykres wielowierszowy z pliku .CSV w matplotlib
Od tygodni próbuję wydrukować 3 zestawy danych (x, y) na tym samym wykresie z pliku .CSV i nigdzie nie dochodzę. Moje dane były pierwotnie plikiem Excela, który przekonwertowałem na plik .CSV i użyłempandas
aby przeczytać go w IPythonie zgodnie z następującym kodem:
from pandas import DataFrame, read_csv
import pandas as pd
# define data location
df = read_csv(Location)
df[['LimMag1.3', 'ExpTime1.3', 'LimMag2.0', 'ExpTime2.0', 'LimMag2.5','ExpTime2.5']][:7]
Moje dane są w następującym formacie:
Type mag1 time1 mag2 time2 mag3 time3
M0 8.87 41.11 8.41 41.11 8.16 65.78;
...
M6 13.95 4392.03 14.41 10395.13 14.66 25988.32
Próbuję spiskowaćtime1
vsmag1
, time2
vsmag2
itime3
vsmag3
, wszystko na tej samej fabule, ale zamiast tego dostaję wątkitime..
vsType
, np. dla kodu:
df['ExpTime1.3'].plot()
dostaję'ExpTime1.3'
(oś y) wykreślona w funkcjiM0
doM6
(oś x), kiedy chcę'ExpTime1.3'
vs'LimMag1.3'
, z etykietami xM0
- M6
.
Jak mogę uzyskać'ExpTime..'
vs'LimMag..'
działki ze wszystkimi 3 zestawami danych na tej samej działce?
Jak zdobyćM0
- M6
etykiety na osi x dla'LimMag..'
wartości (także na osi x)?
Od czasu wypróbowania rozwiązań askewchan, które nie zwróciły żadnych wątków z nieznanych powodów, odkryłem, że mogę uzyskać fabułęExpTime
vsLimMag
za pomocądf['ExpTime1.3'].plot(),
jeśli zmienię indeks ramki danych (df.index) na wartości osi x (LimMag 1.3). Wydaje się to jednak oznaczać, że muszę przekształcić każdą żądaną oś x w indeks ramki danych, ręcznie wprowadzając wszystkie wartości żądanej osi x, aby uczynić ją indeksem danych. Mam bardzo dużo danych, a ta metoda jest po prostu zbyt powolna i mogę narysować tylko jeden zestaw danych na raz, kiedy muszę narysować wszystkie 3 serie dla każdego zestawu danych na jednym wykresie. Czy istnieje sposób na rozwiązanie tego problemu? A może ktoś może podać powód i rozwiązanie, dlaczego nie mam żadnych wątków z rozwiązaniami oferowanymi przez askewchan?
W odpowiedzi na nordeva spróbowałem ponownie pierwszej wersji, bu nie wyprodukowano żadnych wątków, nawet pustej figury. Za każdym razem wkładam jedną z nichax.plot
polecenia, otrzymuję dane wyjściowe typu:[<matplotlib.lines.Line2D at 0xb5187b8>]
, ale kiedy wprowadzę polecenieplt.show()
nic się nie dzieje. Kiedy wchodzęplt.show()
po pętli w drugim rozwiązaniu askewchana pojawia się komunikat błęduAttributeError: 'function' object has no attribute 'show'
Zrobiłem trochę więcej bójki z moim oryginalnym kodem i mogę teraz uzyskać fabułęExpTime1.3
vsLimMag1.3
z kodemdf['ExpTime1.3'][:7].plot()
, czyniąc indeks takim samym jak oś x (LimMag 1.3), ale nie mogę uzyskać dwóch pozostałych zestawów danych na tym samym wykresie. Byłbym wdzięczny za wszelkie dalsze sugestie. Używam ipython 0.11.0 przez Anaconda 1.5.0 (64bit) i spyder na Windows 7 (64bit), wersja python to 2.7.4.