<p>与@MrT提到的“插值法”类似:</p>
<pre><code>import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df_high = pd.DataFrame({'Date':pd.date_range('2020-01-01', periods=100, freq='3D'),
'data_value':400+np.random.randint(0,20, 100)})
df_low = pd.DataFrame({'Date':pd.date_range('2020-03-03', periods=100, freq='3D'),
'data_value':-200+np.random.randint(0,20, 100)})
plt.figure(figsize=(30,20))
fig, ax = plt.subplots(1)
plt.plot(df_high['Date'], df_high['data_value'], label = "Record High")
plt.plot(df_low['Date'], df_low['data_value'], label = "Record Low")
# plt.scatter(tmin2015['Date'].tolist(), tmin2015['Data_Value'], marker='o', c='green', label="2015 record low")
x = plt.gca().xaxis
plt.xlabel("Year", fontsize=16)
plt.ylabel("Temperature in \N{DEGREE SIGN}C", fontsize=16)
plt.title("Extreme Temperature Recorded Every Year")
for item in x.get_ticklabels():
item.set_rotation(45)
plt.legend(loc='best')
min_x = max(df_high['Date'].min(), df_low['Date'].min())
max_x = min(df_high['Date'].max(), df_low['Date'].max())
xrange = df_low.set_index('Date').index.union(df_high.set_index('Date').index)
lows = df_low.set_index('Date').reindex(xrange).interpolate().loc[min_x:max_x, 'data_value']
highs = df_high.set_index('Date').reindex(xrange).interpolate().loc[min_x:max_x, 'data_value']
ax.fill_between(lows.index, lows, highs, alpha=.4)
</code></pre>
<p>输出:</p>
<p><a href="https://i.stack.imgur.com/u9mBD.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/u9mBD.png" alt="enter image description here"/></a></p>