Python matplotlib中的ax.fill()填充错误区域

Python matplotlib中的ax.fill()填充错误区域,python,matplotlib,Python,Matplotlib,我正在尝试使用matplotlib绘制Lorenz曲线,我想填充Lorenz曲线下方的区域,下面是我编写代码的方式: import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") # I used seaborn for different styles. x = [0, 0.10304926499801351, 0.20455899880810488, 0.30986789829161698,

我正在尝试使用matplotlib绘制Lorenz曲线,我想填充Lorenz曲线下方的区域,下面是我编写代码的方式:

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("darkgrid")
# I used seaborn for different styles.

x = [0, 0.10304926499801351, 0.20455899880810488, 0.30986789829161698,
0.41132796980532377, 0.51018077075883983, 0.61201330949543098,
0.71223182359952319, 0.81185439014700034, 0.91063269765593957,
1.0]

y = [0, 0.016037735849056604, 0.033018867924528301, 0.063207547169811321,
0.087735849056603782, 0.13962264150943399, 0.20000000000000001,
0.27547169811320754, 0.37264150943396224, 0.53018867924528301,
1.0]

fig, ax = plt.subplots()
ax.fill(x, y, 'b', alpha=0.3)
plt.show()
结果是这样的:

很明显,它没有像预期的那样工作,因为我想填充曲线下的区域

我尝试了其他一些例子,比如:

x = np.linspace(0, 2 * np.pi, 500)
y1 = np.sin(x)
fig, ax = plt.subplots()
ax.fill(x, y1, 'b', alpha=0.3)
plt.show()

他们都做得很好。我一定是在自己的情节中漏掉了什么,但我想不出来。有什么想法吗?

我想你应该使用
fill\u-between
而不是
fill
fill
填充曲线点之间的区域。因此,您得到的结果是预期的。 填充curce和其他曲线或常量
y
值之间的区域

使用

ax.fill_between(x, y, y2=0, color='b', alpha=0.3)
得到y=0零线和曲线之间的面积:


ax.fill对正弦曲线起作用的原因是
sin(0)==sin(2*pi)==0
。您可以尝试让x运行到
np.pi/2.
,您将得到一个非常不同的结果。@OP,您现在有了足够的声望来提升所选答案的投票率。