Pyplot yaxis组织和标准化,在一个图中具有多个数据集

时间:2018-10-14 14:51:49

标签: python matplotlib

在完成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)

0 个答案:

没有答案