2015-07-04 27 views
0

我想繪製如下圖所示的分佈 - 分佈的尾部。我已經嘗試過但並不完全去那裏:使用Python重現一個圖中提供的兩個分佈

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.mlab as mlab 
import math 

mean1 = 0 
variance1 = 1 
sigma1 = math.sqrt(variance1) 
x = np.linspace(-3,3.5,100, endpoint=True) 
plt.plot(x,mlab.normpdf(x,mean1,sigma1)) 

mean2 = 0.4 
variance2 = 2 
sigma2 = math.sqrt(variance2) 
y = np.linspace(-4,3.5,100, endpoint=False) 
plt.plot(x,mlab.normpdf(y,mean2,sigma2)) 
##plt.axis('off') 
plt.yticks([]) 
plt.xticks([]) 
plt.show() 

任何建議都會很感激?

enter image description here

回答

3

你想fill_between

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.mlab as mlab 
import math 

mean1 = 0 
variance1 = 1 
sigma1 = math.sqrt(variance1) 
x = np.linspace(-3,3.5,100, endpoint=True) 
y1 = mlab.normpdf(x,mean1,sigma1) 
fig, ax = plt.subplots() 
ax.plot(x,y1) 

mean2 = 0.4 
variance2 = 2 
sigma2 = math.sqrt(variance2) 
y = np.linspace(-4,3.5,100, endpoint=False) 
y2 = mlab.normpdf(y,mean2,sigma2) 
ax.plot(x,y2) 


ax.fill_between(x[:30], y1[:30], color='blue') 
ax.fill_between(x[:30], y2[:30], color='green') 
ax.fill_between(x[-30:], y1[-30:], y2[-30:], color='red', alpha=0.5) 
ax.set_yticks([]) 
ax.set_xticks([]) 
plt.savefig('fill_norms.png') 
plt.show() 

enter image description here

這是一個瘋狂的簡單的例子 - 見cookbook examples,並期待在where條款;你的填充高光可以適應你正在繪製的線條的變化(例如,一個自動的紅色fill_ between every BADTHING超過GOODTHING,而不需要找出索引(在這個例子中是30或者-30))。

+0

我的OP不夠清楚。我主要想要在右側獲得尾巴分佈 – Ibe

+2

你的意思是你的Y值是錯的嗎?這是一個統計問題,而不是編程問題。 – cphlewis

+0

問題是 - 統計和顏色尾巴。修正了一切,但只有剩下的東西是如何像樣本圖一樣對y1和y2的右側顏色進行着色? – Ibe

相關問題