簡體   English   中英

Matplotlib在方法和日期時間之間填充

[英]Matplotlib fill between method and datetime

我正在嘗試使用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的鏈接

謝謝

此問題的解決方案可以在此答案中找到。 因此,嘗試

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

此解決方法應同時適用於plt和軸plt.fill_between( w.dt.to_pydatetime(), data['A'],...它將numpy datetime64 [ns]轉換為fill_between能理解的python的日期時間。

順便說一句,可以使用pd.read_fwf代替for loop來完成讀取修復格式。 這是另一種懶惰的方法,但是比循環快得多:

df = pd.read_csv(your_data_url,skiprows=2, header=None, sep="\\n") df = df[0].str.split("\\s+",expand=True).loc[:,1:7] df.columns = ['year','month','day','RMM1', 'RMM2', 'phase', 'amplitude']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM