matplotlib.pyplot jak utworzyć ten wykres

0

Hej,
mam problem z utworzeniem wykresu dla zestawu dwóch list z wartościami. Oto część kodu:

    rok = np.array(rok)
    srednie = np.array(srednie)
    plt.plot(rok,srednie)

A tu wykres:
screenshot-20220119161802.png

Problemem jest oczywiście to, że wartości na OY są ustawione w takiej kolejności w jakiej występują w macierzy. Należy je posortować, ale tak żeby dalej odpowiadały wartościom z OX. Próbowałem wielu różnych rzeczy, niestety nic nie wymyśliłem. Możecie mi coś podpowiedzieć/napisać jak ma być i wytłumaczyć?

0

Wrzuć cały kod.

0

@veneficus:

import csv
import numpy as np
import matplotlib.pyplot as plt

def funkcja():
    tabela = list(dane)
    rok = []
    srednie = []
    for x in tabela:
        rok.append(x[1].split('-')[0])
    rok = sorted(set(rok))
    for x in rok:
        suma = 0
        licznik = 0
        for y in tabela:
            if y[1].split('-')[0] == x:
                suma += float(y[2])
                licznik += 1
        srednie.append(str(round(suma/licznik, 2)))
        print('Srednia temperatura w ' , x , ' wynosila ' , str(round(suma/licznik,2)))
    rok = np.array(rok)
    srednie = np.array(srednie)
    plt.plot(rok,srednie)
    plt.title('Wykres sredniej temperatury dla lotniska ')
    plt.xlabel('Rok')
    plt.ylabel('Temp')
    plt.grid()
    plt.axis('tight')
    plt.show()
    return

while 1:
    lotnisko = input('Wybierz lotnsko: ')
    if lotnisko == 'Koniec' :
        break
    elif lotnisko == 'EPPO':
        with open('EPPOm.txt', 'r', newline='') as eppo:
            dane = csv.reader(eppo, delimiter = ',')
            funkcja()
        break
    elif lotnisko == 'EPWA':
        with open('EPWAm.txt', 'r', newline='') as epwa:
            dane = csv.reader(epwa, delimiter = ',')
            funkcja()
        break

tu rekord z pliku csv 3 kolumna to temperatura
EPWA,2011-08-22 19:30,21.00,18.00,82.98,350.00,5.00

1

Pewnie twoje wartości na Y to stringi, a nie liczby, porównaj sobie:

>>> plt.plot([1, 2, 3, 4, 5], [9, 2, 4, 12, 1])
>>> plt.plot([1, 2, 3, 4, 5], ['9', '2', '4', '12', '1'])
0

@Spearhead: Variable explorer pokazuje że są to wartości int (powinno być float, ale tym można się martwić później). zamiana typu 'float(srednie)' nie kompiluje się. Stworzyłem ręcznie nową zwyklą listę biblioteki standardowej. Pogrzebię i może uda się zamienić jakoś automatycznie(coś typu 'float(srednie)'). Jeśli nie to przepiszę każdą pojedynczą wartość i zamianę jej na float i dalej przepisanie z użyciem for. Powinno działać, dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1