Организация и стандартизация Pyplot yaxis с несколькими наборами данных на одном графике - PullRequest
0 голосов
/ 14 октября 2018

Работая через Python Crash Course, я пришел к этой проблеме, пытаясь построить два набора данных из двух разных файлов .csv.Файлы содержат даты и информацию о температуре для двух городов.Даты одинаковы и выкладываются на оси полностью, но яксис загроможден, не в порядке и нечитаем.Вот мой код:

#Python 3.7

import csv
from matplotlib import pyplot as pyp 
from datetime import datetime

filename_1= "sitka_weather_2014.csv"
with open(filename_1) as f1:
    reader= csv.reader(f1)
    header_row= next(reader)

    for index, column_header in enumerate(header_row):
        print(index, column_header)

    highs_SKA, dates_SKA= [], []
    for row in reader:
        high_SKA= float(int(row[1]))
        highs_SKA.append(high_SKA)

        date= datetime.strptime(row[0], "%Y-%m-%d")
        dates_SKA.append(date)

filename_2= "death_valley_2014.csv"
with open(filename_2) as f2:
    reader2= csv.reader(f2)
    header_row2= next(reader2)

    for index2, column_header2 in enumerate(header_row2):
        print(index2, column_header2)

    highs_dv= []
    dates_dv= []
    for row in reader2:
        high_dv= row[1]
        highs_dv.append(high_dv)

        date_dv= datetime.strptime(row[0], "%Y-%m-%d")
        dates_dv.append(date_dv)

pyp.figure(dpi=100, figsize=(7, 5))
pyp.plot(dates_SKA, highs_SKA, c='red', alpha=0.5)
pyp.plot(dates_dv, highs_dv, c='green', alpha=0.5)
pyp.show()

Я пытался определить собственные метки оси и масштаб, но не могу понять, как это сделать только для яси.Я читал, что проблема может быть связана с попыткой построить строки, но я не могу преобразовать температуры второго файла .csv в целые числа.Я получаю «ValueError: недопустимый литерал для int () с основанием 10» при попытке конвертировать «death_valley.csv» температуры.Похоже, что работает нормально для "sitka_weather_2014.csv".

Я хочу стандартизировать яксис.Мой главный вопрос на данный момент заключается в том, как заставить яксис взаимодействовать с обоими данными.

РЕДАКТИРОВАТЬ: Как выглядит график на данный момент

EDIT_2:В попытке преобразовать список highs_dv (из второго файла) в целые числа, я попытался:

high_dv= [None if high_dv is ' ' else float(high_dv) for high_dv in row[1]]
highs_dv.append(high_dv)

Это дало мне «ValueError: установка элемента массива с последовательностью»

Я также пытался использовать цикл for на тот случай, если я ошибся в понимании списка для high_dv:

for high_dv in row[1]:
    if high_dv is ' ':
        high_dv = None
    else:
        high_dv= float(high_dv)
    highs_dv.append(high_dv)

Также попытался:

for high_dv in row[1]:
    if high_dv.isnumeric():
        high_dv= float(high_dv)
    else:
        high_dv= None
    highs_dv.append(high_dv)

Оба вышеупомянутых цикла дали мне «ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (360,) и (797,) ".

EDIT_3: я понял, что мой цикл был неправильным во втором редактировании.Я создал второй цикл, в котором у меня не должно было быть, например:

for row in reader:
    for high_dv in row[1]:

После некоторой игры с ним я смог конвертировать в float с:

for row in reader:
    if row[1] is ' ':
        high_dv= None
    else:
        high_dv= float(row[1])
    highs_dv.append(high_dv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...