Работая через 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)