gpt4 book ai didi

python - 使用日期时间创建条形图

转载 作者:行者123 更新时间:2023-11-28 19:12:10 26 4
gpt4 key购买 nike

我正在使用 matplotlib 和 pyplot 从 CSV 文件创建一些图表。我可以毫无问题地创建折线图,但在创建条形图时遇到很多问题。

我引用了这篇文章 matplotlib bar chart with dates在其他几个看起来他们应该很容易完成我的任务的人中,但我无法让它与我的日期时间列表一起工作。

运行上面帖子中的确切代码会生成预期的图表,但是当我从我的 CSV 文件中将它们的 x 和 y 值换成我自己的值时:

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


columns="YEAR,MONTH,DAY,HOUR,PREC,PET,Q,UZTWC,UZFWC,LZTWC,LZFPC,LZFSC,ADIMC,AET"

data_file="FFANA_000.csv"

list_of_datetimes = []
skipped_header = False
with open(data_file, 'rt') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
for row in reader:
if skipped_header:
date_string = "%s/%s/%s %s" % (row[0].strip(), row[1].strip(), row[2].strip(), row[3].strip())
dt = datetime.strptime(date_string, "%Y/%m/%d %H")
list_of_datetimes.append(dt)
skipped_header = True


UZTWC = np.genfromtxt(data_file, delimiter=',', names=columns, usecols=("UZTWC"))

x = list_of_datetimes
y = UZTWC

ax = plt.subplot(111)
ax.bar(x, y, width=10)
ax.xaxis_date()

plt.show()

运行这个给出错误:

Traceback (most recent call last):
File "graph.py", line 151, in <module>
ax.bar(x, y, width=10)
File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\__init__.py", line 1812, in inner
return func(ax, *args, **kwargs)
File "C:\Users\rbanks\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_axes.py", line 2118, in bar
if h < 0:
TypeError: unorderable types: numpy.ndarray() < int()

当我运行绘制折线图所需的日期时间 numpy 转换时:

list_of_datetimes = matplotlib.dates.date2num(list_of_datetimes)

我得到了同样的错误。

谁能提供一些见解?

摘自 FFANA_000.csv:

%YEAR,MO,DAY,HR,PREC(MM/DT),ET(MM/DT),Q(CMS), UZTWC(MM),UZFWC(MM),LZTWC(MM),LZFPC(MM),LZFSC(MM),ADIMC(MM), ET(MM/DT)
2012, 5, 1, 0, 0.000, 1.250, 0.003, 2.928, 0.000, 3.335, 4.806, 0.000, 6.669, 1.042
2012, 5, 1, 6, 0.000, 1.250, 0.003, 2.449, 0.000, 3.156, 4.798, 0.000, 6.312, 0.987
2012, 5, 1, 12, 0.000, 1.250, 0.003, 2.048, 0.000, 2.970, 4.789, 0.000, 5.940, 0.929
2012, 5, 1, 18, 0.000, 1.250, 0.003, 1.713, 0.000, 2.782, 4.781, 0.000, 5.564, 0.869
2012, 5, 2, 0, 0.000, 1.250, 0.003, 1.433, 0.000, 2.596, 4.772, 0.000, 5.192, 0.809
2012, 5, 2, 6, 0.000, 1.250, 0.003, 1.199, 0.000, 2.414, 4.764, 0.000, 4.829, 0.750
2012, 5, 2, 12, 0.000, 1.250, 0.003, 1.003, 0.000, 2.239, 4.756, 0.000, 4.478, 0.693
2012, 5, 2, 18, 0.000, 1.250, 0.003, 0.839, 0.000, 2.072, 4.747, 0.000, 4.144, 0.638
2012, 5, 3, 0, 0.000, 1.250, 0.003, 0.702,

最佳答案

我无法用您的数据和代码完全重现您的问题。我明白了

> UZTWC = np.genfromtxt(data_file, delimiter=';', names=columns,
> usecols=("UZTWC")) File
> "C:\Python34-64bit\lib\site-packages\numpy\lib\npyio.py", line 1870,
> in genfromtxt
> output = np.array(data, dtype) ValueError: could not convert string to float: b'UZTWC(MM)'

但尝试将 UZTWC = np.genfromtxt(...) 更改为

UZTWC = np.genfromtxt(data_file, delimiter=',', usecols=(7), skip_header=1)

你应该得到一个图表。问题是由于某种原因,您的 numpy 数组是由字符串而不是 float 组成的。

关于python - 使用日期时间创建条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com