[英]matplotlib fill_between leaves gaps
我正在嘗試在原始matplotlib中重新創建seaborn的僅填充置信區間繪圖 。 在這樣做時,我fill_between
了奇怪的行為,其中fill_between
函數在它應該填充的東西之間留下間隙。
我正在使用真實世界的數據,但它是表現良好的數據:x值在大約0-15的范圍內,y值在大約25-85的范圍內。 我正在使用statsmodels來擬合線並生成置信區間,基本上是來自此先前SO的代碼 ,並且擬合值以及置信區間的上限和下限是它們應該的(范圍是合適的,等等。)。 所以數據沒有錯。
這是代碼的相關部分:
def make_plot(x, y):
fig = plt.figure(figsize=(12, 9))
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y, 'k.', ms=5)
ax.locator_params(nbins=3)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
regline = sm.OLS(y,sm.add_constant(x)).fit()
fitted = regline.fittedvalues
ax.plot(x, fitted, color=(0.2, 0.2, 0.2, 0.2), linewidth=2)
ci_low, ci_high = get_ci_values(regline)
ax.fill_between(x, ci_low, fitted, facecolor=(0.4, 0.4, 0.9, 0.2))
ax.fill_between(x, ci_high, fitted, facecolor=(0.9, 0.4, 0.4, 0.2))
return fig
線條填充工作正常,直到它在x = 10,y = 50附近,然后它開始留下奇怪的間隙,它不會一直到回歸線。 這是一個例子:
我在這做錯了什么? 我嘗試了很多東西,包括:
為低和高置信區間添加線
將interpolate=True
添加到fill_between
調用
在fill_between
調用中添加where=x>0
但這些都沒有任何區別。
我還注意到seaborn 設法使用fill_between
進行漂亮的填充,使用完全相同的策略,並且seaborn的繪圖在我正在使用的數據上正確工作...
人們無法確切知道,因為問題是缺少必要部分,即數據本身(參見最小,完整和可驗證的例子 )。
然而,這里強烈的懷疑是數據沒有排序 。
(未經測試的)解決方案是對數據進行排序,
ax.plot(np.sort(x), fitted[np.argsort(x)])
ax.fill_between(np.sort(x), ci_low[np.argsort(x)], fitted[np.argsort(x)])
要理解為什么需要對值進行排序,也許圖片可以說出超過幾千個單詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.