[英]Filling between two lines on python
我有以下公式:
ax = plt.gca()
datamax.plot(kind='line',x='Date',y='Data_Value',color='red',ax=ax)
datamin.plot(kind='line',x='Date',y='Data_Value', color='blue',ax=ax)
plt.ylabel("Temperature (degrees C)",color='navy')
plt.xlabel("Date",color='navy',labelpad=15)
plt.title('Record high and low temperatures by day (2005-2014)', alpha=1.0,color='brown')
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.35),
fancybox=False,labels=['Record high','Record low'])
plt.xticks(rotation=30)
plt.gca().fill_between(datamax['Date'],datamax['Data_Value'],datamin['Data_Value'],facecolor='yellow',alpha=0.25)
plt.show()
我想在下面折線圖的兩條線之間填充,但不知何故我的代碼不起作用。 誰能幫助理解為什么?
我認為 fill_between 命令會起作用,但由於某種原因它不是......
當我嘗試:
ax.fill_between(datamax['Date'],datamax['Data_Value'],datamin['Data_Value'],facecolor='yellow',alpha=0.25)
我收到錯誤消息:
輸入類型不支持 ufunc 'isfinite',並且根據轉換規則 ''safe'' 無法安全地將輸入強制轉換為任何支持的類型
我的圖表目前看起來像這樣:
dataframe 數據最大值如下所示:
Date ID Element Data_Value
0 2005-01-01 USW00094889 TMAX 156
1 2005-01-02 USW00094889 TMAX 139
2 2005-01-03 USW00094889 TMAX 133
3 2005-01-04 USW00094889 TMAX 39
4 2005-01-05 USW00094889 TMAX 33
5 2005-01-06 USW00094889 TMAX 0
6 2005-01-07 USW00094889 TMAX 6
7 2005-01-08 USW00094889 TMAX 17
8 2005-01-09 USW00094889 TMAX 28
9 2005-01-10 USW00094889 TMAX 44
10 2005-01-11 USW00094889 TMAX 44
11 2005-01-12 USW00094889 TMAX 139
12 2005-01-13 USW00094889 TMAX 161
13 2005-01-14 USW00094889 TMAX 150
14 2005-01-15 USW00094889 TMAX -33
15 2005-01-16 USW00094889 TMAX -33
16 2005-01-17 USW00094889 TMAX -50
17 2005-01-18 USW00094889 TMAX -33
18 2005-01-19 USW00094889 TMAX 11
19 2005-01-20 USW00094889 TMAX 11
20 2005-01-21 USW00094889 TMAX -39
21 2005-01-22 USW00094889 TMAX -72
22 2005-01-23 USW00094889 TMAX -44
23 2005-01-24 USW00094889 TMAX 11
24 2005-01-25 USW00094889 TMAX 28
25 2005-01-26 USW00094889 TMAX 28
26 2005-01-27 USW00094889 TMAX 6
27 2005-01-28 USW00094889 TMAX -11
28 2005-01-29 USW00094889 TMAX 17
29 2005-01-30 USW00094889 TMAX 28
... ... ... ... ...
3603 2014-11-13 USW00094889 TMAX 39
3604 2014-11-14 USW00094889 TMAX 33
3605 2014-11-15 USW00094889 TMAX 28
3606 2014-11-16 USW00094889 TMAX 28
3607 2014-11-17 USW00094889 TMAX 17
3608 2014-11-18 USW00094889 TMAX 11
3609 2014-11-19 USW00094889 TMAX 11
3610 2014-11-20 USW00094889 TMAX 6
3611 2014-11-21 USW00094889 TMAX -10
3612 2014-11-22 USW00094889 TMAX 106
3613 2014-11-23 USW00094889 TMAX 156
3614 2014-11-24 USW00094889 TMAX 172
3615 2014-11-25 USW00094889 TMAX 172
3616 2014-11-26 USW00094889 TMAX 28
3617 2014-11-27 USW00094889 TMAX 39
3618 2014-11-28 USW00094889 TMAX 22
3619 2014-11-29 USW00094889 TMAX 117
3620 2014-11-30 USW00094889 TMAX 178
3621 2014-12-01 USW00094889 TMAX 172
3622 2014-12-02 USW00094889 TMAX 33
3623 2014-12-03 USW00094889 TMAX 61
3624 2014-12-04 USW00094889 TMAX 50
3625 2014-12-05 USW00094889 TMAX 50
3626 2014-12-06 USW00094889 TMAX 67
3627 2014-12-07 USW00094889 TMAX 67
3628 2014-12-08 USW00094889 TMAX 72
3629 2014-12-09 USW00094889 TMAX 56
3630 2014-12-10 USW00094889 TMAX 50
3631 2014-12-11 USW00094889 TMAX 61
3632 2014-12-12 USW00094889 TMAX 50
[3631 rows x 4 columns]
dataframe datamin像這樣:
Date ID Element Data_Value
0 2005-01-01 USC00200032 TMIN -56
1 2005-01-02 USC00200032 TMIN -56
2 2005-01-03 USC00200032 TMIN 0
3 2005-01-04 USC00200032 TMIN -39
4 2005-01-05 USC00200032 TMIN -94
5 2005-01-06 USC00200032 TMIN -106
6 2005-01-07 USC00200032 TMIN -111
7 2005-01-08 USC00200032 TMIN -100
8 2005-01-09 USC00200032 TMIN -67
9 2005-01-10 USC00200032 TMIN -56
10 2005-01-11 USC00200032 TMIN -22
11 2005-01-12 USC00200032 TMIN -17
12 2005-01-13 USC00200032 TMIN -83
13 2005-01-14 USC00200032 TMIN -128
14 2005-01-15 USC00200032 TMIN -144
15 2005-01-16 USC00200032 TMIN -150
16 2005-01-17 USC00200032 TMIN -189
17 2005-01-18 USC00200032 TMIN -217
18 2005-01-19 USC00200228 TMIN -300
19 2005-01-20 USC00200032 TMIN -156
20 2005-01-21 USC00200032 TMIN -178
21 2005-01-22 USC00200032 TMIN -178
22 2005-01-23 USC00200032 TMIN -250
23 2005-01-24 USC00200032 TMIN -267
24 2005-01-25 USC00200032 TMIN -228
25 2005-01-26 USC00200032 TMIN -206
26 2005-01-27 USC00200032 TMIN -239
27 2005-01-28 USC00200032 TMIN -250
28 2005-01-29 USC00200032 TMIN -222
29 2005-01-30 USC00200228 TMIN -217
... ... ... ... ...
3603 2014-11-13 USC00200032 TMIN -71
3604 2014-11-14 USC00200032 TMIN -78
3605 2014-11-15 USC00200032 TMIN -94
3606 2014-11-16 USC00200032 TMIN -72
3607 2014-11-17 USC00200032 TMIN -106
3608 2014-11-18 USC00200032 TMIN -144
3609 2014-11-19 USC00200032 TMIN -128
3610 2014-11-20 USC00200032 TMIN -122
3611 2014-11-21 USC00200032 TMIN -182
3612 2014-11-22 USC00200032 TMIN -172
3613 2014-11-23 USC00200032 TMIN -100
3614 2014-11-24 USC00200032 TMIN -5
3615 2014-11-25 USC00200032 TMIN -33
3616 2014-11-26 USC00200032 TMIN -67
3617 2014-11-27 USC00200032 TMIN -82
3618 2014-11-28 USC00200032 TMIN -133
3619 2014-11-29 USC00200032 TMIN -106
3620 2014-11-30 USC00200032 TMIN -56
3621 2014-12-01 USC00200032 TMIN -88
3622 2014-12-02 USC00200032 TMIN -99
3623 2014-12-03 USC00200032 TMIN -71
3624 2014-12-04 USC00200032 TMIN -77
3625 2014-12-05 USC00200032 TMIN -61
3626 2014-12-06 USC00200032 TMIN -50
3627 2014-12-07 USC00200032 TMIN -78
3628 2014-12-08 USC00200032 TMIN -78
3629 2014-12-09 USC00200032 TMIN -39
3630 2014-12-10 USC00200032 TMIN -72
3631 2014-12-11 USC00200032 TMIN -88
3632 2014-12-12 USC00200032 TMIN -78
[3631 rows x 4 columns]
你能試一下嗎
plt.fill_between(datamax['Date'],datamax['Data_Value'],datamin['Data_Value'],facecolor='yellow',alpha=0.25)
代替
plt.gca().fill_between(datamax['Date'],datamax['Data_Value'],datamin['Data_Value'],facecolor='yellow',alpha=0.25)
/
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option("display.max_rows",None,"display.max_columns",None)
data = pd.read_csv('data/C2A2_data/BinnedCsvs_d400/fb441e62df2d58994928907a91895ec62c2c42e6cd075c2700843b89.csv')
newdata = data[(data['Date'] >= '2005-01-01') & (data['Date'] <= '2014-12-12')]
datamax = newdata[newdata['Element']=='TMAX']
datamin = newdata[newdata['Element']=='TMIN']
datamax['Date'] = pd.to_datetime(datamax['Date'])
datamin['Date'] = pd.to_datetime(datamin['Date'])
datamax["day_of_year"] = datamax["Date"].dt.dayofyear
datamax = datamax.groupby('day_of_year').max()
datamin["day_of_year"] = datamin["Date"].dt.dayofyear
datamin = datamin.groupby('day_of_year').min()
datamax = datamax.reset_index()
datamin = datamin.reset_index()
datamin['Date'] = datamin['Date'].dt.strftime('%Y-%m-%d')
datamax['Date'] = datamax['Date'].dt.strftime('%Y-%m-%d')
datamax = datamax[~datamax['Date'].str.contains("02-29")]
datamin = datamin[~datamin['Date'].str.contains("02-29")]
breakoutdata = data[(data['Date'] > '2014-12-31')]
datamax2015 = breakoutdata[breakoutdata['Element']=='TMAX']
datamin2015 = breakoutdata[breakoutdata['Element']=='TMIN']
datamax2015['Date'] = pd.to_datetime(datamax2015['Date'])
datamin2015['Date'] = pd.to_datetime(datamin2015['Date'])
datamax2015["day_of_year"] = datamax2015["Date"].dt.dayofyear
datamax2015 = datamax2015.groupby('day_of_year').max()
datamin2015["day_of_year"] = datamin2015["Date"].dt.dayofyear
datamin2015 = datamin2015.groupby('day_of_year').min()
datamax2015 = datamax2015.reset_index()
datamin2015 = datamin2015.reset_index()
datamin2015['Date'] = datamin2015['Date'].dt.strftime('%Y-%m-%d')
datamax2015['Date'] = datamax2015['Date'].dt.strftime('%Y-%m-%d')
datamax2015 = datamax2015[~datamax2015['Date'].str.contains("02-29")]
datamin2015 = datamin2015[~datamin2015['Date'].str.contains("02-29")]
dataminappend = datamin2015.join(datamin,on="day_of_year",rsuffix="_new")
lower = dataminappend.loc[dataminappend["Data_Value_new"]>dataminappend["Data_Value"]]
datamaxappend = datamax2015.join(datamax,on="day_of_year",rsuffix="_new")
upper = datamaxappend.loc[datamaxappend["Data_Value_new"]<datamaxappend["Data_Value"]]
upper['Date'] = pd.to_datetime(upper['Date'])
lower['Date'] = pd.to_datetime(lower['Date'])
datamax['Date'] = pd.to_datetime(datamax['Date'])
datamin['Date'] = pd.to_datetime(datamin['Date'])
ax = plt.gca()
plt.plot(datamax['day_of_year'],datamax['Data_Value'],color='red')
plt.plot(datamin['day_of_year'],datamin['Data_Value'], color='blue')
plt.scatter(upper['day_of_year'],upper['Data_Value'],color='purple')
plt.scatter(lower['day_of_year'],lower['Data_Value'], color='cyan')
plt.ylabel("Temperature (degrees C)",color='navy')
plt.xlabel("Day of the year",color='navy',labelpad=15)
plt.title('Record high and low temperatures by day between 2005-2014)', alpha=1.0,color='brown',y=1.08)
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.35),fancybox=False,labels=['Record high','Record low'])
plt.xticks(rotation=30)
plt.fill_between(range(len(datamax['Date'])), datamax['Data_Value'], datamin['Data_Value'],color='yellow',alpha=0.8)
plt.show()
/
我已使用 Datamin['Date'] = datamin['Date'].dt.strftime('%Y-%m-%d') 將“日期”列轉換為字符串。
然后我使用 upper['Date'] = pd.to_datetime(upper['Date']) 將其轉換回'datetime'格式
然后我使用“年份”作為 x 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.