2017-04-21 49 views
3

我試圖使用matplotlib繪製一個洛倫茲曲線,我想填寫下面的洛倫茨曲線的區域,這裏就是我寫的代碼:ax.fill()在matplotlib填寫錯誤區域

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() 

它結束了這樣的事情:

enter image description here

顯然如預期,因爲我想填寫下面的曲線下面積它不工作。

我試圖像這樣的一些其他的例子:

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() 

,他們都工作得很好。我一定錯過了自己的情節,但無法弄清楚。有什麼想法嗎?

+0

原因'ax.fill'正在爲罪曲線即sin(0)== sin(2 * pi)== 0'。你可以嘗試讓x運行到'np.pi/2.',你將得到一個非常不同的結果。 – ImportanceOfBeingErnest

+0

@OP,你現在有足夠的信譽來選擇答案。 –

回答

2

我想你想用fill_between而不是fillfill填充曲線點之間的區域。因此預計會得到結果。 fill_between填充曲線和一些其他曲線或常數y值之間的區域。

使用

ax.fill_between(x, y, y2=0, color='b', alpha=0.3) 

你充滿y = 0的零線與你的曲線之間的面積:

enter image description here