我有两个具有相应值的列表,例如:[A,B,C]和[d,e,f],其中A,B和C是日期时间对象,d,e和f是浮点对象,“d” " 是出现在“A”上的值。我有另一个日期时间对象列表,可以将其分入 A、B 和 C 范围,但我想将它们分入相应的 d、e 和 f 值。
我的代码现在看起来像这样:
import csv
import matplotlib.pyplot as plt
import datetime
list1 = []
zip1 = []
zip2 = []
#opening files and setting lists as csv inputs
with open("whistles.csv") as whistlecsv:
whistlelist = csv.reader(whistlecsv, delimiter = ',')
for row in whistlelist:
list1.append(row[0])
with open("f10.7.csv") as fcsv:
flist = csv.reader(fcsv, delimiter = ',')
for row in flist:
zip2.append(float(row[1]))
zip1.append(row[0])
#converting strings to datetime objects
for i in range(0, len(list1)):
list1[i] = datetime.datetime.strptime(list1[i], "%Y-%m-%d %H:%M:%S")
for i in range(0, len(zip1)):
zip1[i] = datetime.datetime.strptime(zip1[i], "%Y%m%d %H%M%S")
#binning list1 into zip2 using corresponding zip1
for i in range(0, len(list1)):
for j in range(0, len(zip1)):
if int(datetime.datetime.strftime(zip1[j-1], "%Y%m%d%H%M%S")) < int(datetime.datetime.strftime(list1[i], "%Y%m%d%H%M%S")) < int(datetime.datetime.strftime(zip1[j], "%Y%m%d%H%M%S")):
zip2[j-1].append(list1[i])
plt.hist(list1, bins = zip2)
plt.show()
这将返回“AttributeError:'float'对象没有属性'append'” 我想计算 list1 的元素出现在 zip1 中的元素指定的一组值范围内的次数,并绘制一个频率直方图,将该计数映射到 zip2 的相应值。我怎么做?这主要涉及最后一段代码。
我尝试压缩列表 zip1 和 zip2,为每个日期设置特定的浮点值,然后使用 plt.hist() 函数通过 zip2 对 list1 数据进行装箱:
matched = zip(zip1, zip2)
*zip1, *zip2 = zip(*matched)
plt.hist(list1, bins = *zip2)
plt.show()
我知道这基本上只是压缩和解压缩文件,但我已经没有主意了。我试图表明 zip1 和 zip2 是对应的值,因此我基本上应该能够通过任一列表对 list1 进行分类以生成频率直方图,但事实并非如此。
plt.hist() 函数返回一个错误,指出当我尝试按 zip2 值对 list1 数据进行装箱时,即使在压缩 zip1 和 zip2 文件之后,也无法生成简单的形状。
请帮忙!预先感谢。
numpy.histogram
来计算每个容器中的数字,然后使用 stairs
根据浮点值绘制这些数字。
import datetime
import numpy as np
import matplotlib.pyplot as plt
dates = [datetime.datetime(2024, 1, d) for d in range(1, 32)]
date_bins = [datetime.datetime(2024, 1, 1), datetime.datetime(2024, 1, 12),
datetime.datetime(2024, 2, 1)]
float_bins = [3, 27, 42]
counts, _ = np.histogram(dates, bins=date_bins)
fig, ax = plt.subplots()
ax.stairs(counts, float_bins, fill=True)
ax.set_xticks(float_bins)
plt.show()