在完成Python速成课程的过程中,当我尝试从两个不同的.csv文件绘制两组数据时遇到了这个问题。这些文件包含两个城市的日期和温度信息。日期是相同的,并且在x轴上的布局很好,但是y轴混乱,混乱且不可读。到目前为止,这是我的代码:
#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()
我尝试定义自定义轴标签和比例,但仅凭yaxis无法解决如何做到这一点。我读到问题可能是由于试图绘制字符串而引起的,但是我无法将第二个.csv文件的温度转换为整数。尝试转换“ death_valley.csv”温度时,出现“ ValueError:int()的无效文字,基数为10”。对于“ sitka_weather_2014.csv”,它似乎工作正常。
我想标准化yaxis。我目前的主要问题是如何使yaxis与这两个数据配合使用。
编辑: What the plot looks like at the moment
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)