当前位置:  开发笔记 > 编程语言 > 正文

Matplotlib在方法和日期时间之间填充

如何解决《Matplotlib在方法和日期时间之间填充》经验,为你挑选了1个好方法。

我正在尝试使用matplotlib fill_between函数,但出现以下错误“ TypeError:输入类型不支持ufunc'isfinite',并且根据转换规则” safe无法将输入安全地强制转换为任何受支持的类型””

我在x轴中使用了熊猫的datetime,并认为这会引发此类问题。我尚无法找到解决方案。

这是代码

#%%
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Open file
f = open('rmm.74toRealtime.txt', 'r')

# Read and ignore header lines
header1 = f.readline()
header2 = f.readline()

n=15461-2
year=np.zeros(n)
month=np.zeros(n)
day=np.zeros(n)
rmm1=np.zeros(n)
rmm2=np.zeros(n)
phase=np.zeros(n)
ampl=np.zeros(n)
a=np.zeros(n)
b=np.zeros(n)

i=0
# Loop over lines and extract variables of interest
for line in f:
    line = line.strip()
    columns = line.split()
    year[i] = columns[0]
    month[i]=columns[1]
    day[i]=columns[2]
    rmm1[i]=columns[3]
    rmm2[i]=columns[4]
    phase[i]=columns[5]
    ampl[i]=columns[6]
    print([float(year[i]),float(month[i]),float(day[i]),float(rmm1[i]),float(rmm2[i]),float(phase[i]),float(ampl[i])])
    a[i]=str(int(year[i]))+str(int(month[i])).zfill(2) +str(int(day[i])).zfill(2) ;
    i=i+1
f.close()

w=pd.to_datetime(pd.Series(a),format='%Y%m%d')
yt=np.array(np.where((month == 1) & (day ==1)))
a=np.reshape(yt,len(yt[0,:]))

#%%
plt.close('all')
for i in a[:1]:   
    plt.figure()
    plt.plot(w[i:i+365],ampl[i:i+365])
    plt.fill_between(w[i:i+365],ampl[i:i+365],1)
    plt.title('RMM '+str(int(year[i])))
    plt.grid()
    plt.show()

这是数据文件ascii_file的链接

谢谢



1> ImportanceOf..:

此问题的解决方案可以在此答案中找到。因此,尝试

plt.fill_between(w.values[i:i+365],ampl[i:i+365],1)

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有