如何用纯色自动填充折线图上方的区域?

pha*_*han 5 python matplotlib

我用 2 个折线图制作了一个图表。红线是当天的高温,蓝线是当天的低温。Temps 是数据帧,High 是高温,Low 是低温。

Temps = Temps.set_index('Date')
Temps['High'].plot()
Temps['Low'].plot()
Run Code Online (Sandbox Code Playgroud)

这是结果图表:

在此输入图像描述

如何自动用纯红色填充红线上方的区域?然后自动用纯蓝色填充蓝线下方的区域?使用 MatPlotLib 是否可以使其类似于下图(请原谅粗糙的绘制工作)?

在此输入图像描述

Pan*_*shi 5

我将采用以下方法:

import numpy as np
import matplotlib.pyplot as plt

n = 20
low = 10 * np.random.rand(n, 1)
high = low + 5

f, ax = plt.subplots(1, 1)
ax.plot(range(n), low, color='g')
ax.plot(range(n), high, color='r')
ax.fill_between(range(n), low.squeeze(), ax.get_ylim()[0], color='g')
ax.fill_between(range(n), ax.get_ylim()[1], high.squeeze(),  color='r')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Pyg*_*irl 2

是的,matplotlib 可以使用fill_between.

# library
import numpy as np
import matplotlib.pyplot as plt
 
# Create data
x=range(1,6)
y=[1,4,6,8,4]
z = [8-i for i in y]

# Area plot below line
plt.fill_between(x, y, color='g')
plt.show()

# Area plot above line
plt.fill_between(x, y, max(y), color='r')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


完整的解决方案:

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({"Datum": ['1/2/2018',
                             '1/3/2018',
                             '1/4/2018',
                             '1/5/2018',
                             '1/6/2018',
                             '1/7/2018',
                             '1/8/2018',
                             '1/9/2018'],
                   "Menge": [19.5, 19.,19.5,19.5,21,19.5,20,23]})
# sns.lineplot(x="Datum", y="Menge", data=df)
df['Datum'] = pd.to_datetime(df['Datum'])
df.set_index('Datum', inplace=True)
df['Menge2'] = df.Menge+12
df['Menge'].plot()
df['Menge2'].plot()

# Area plot below line
plt.fill_between(df.index, df.Menge, color='g')
# plt.show()

# Area plot above line
plt.fill_between(df.index, df.Menge2, max(df.Menge2), color='r')
 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述