Yerr / xerr'i hata çubukları yerine gölgeli bölge olarak çizin


Yanıtlar:


151

Örnek grafiğinizdeki noktalar arasındaki pürüzsüz enterpolasyonu göz ardı ederek (bu biraz manuel enterpolasyon yapmayı gerektirir veya verilerinizin daha yüksek bir çözünürlüğüne sahip olmayı gerektirir), şunları kullanabilirsiniz pyplot.fill_between():

from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape)
y += np.random.normal(0, 0.1, size=y.shape)

plt.plot(x, y, 'k-')
plt.fill_between(x, y-error, y+error)
plt.show()

görüntü açıklamasını buraya girin

Matplotlib örneklerine de bakınız .


1
Mükemmel. Evet, düzleştirilmiş çizgilerle bir örnek eklemek istemedim.
Austin Richardson

Gölgeli bir bant yerine bu gölgeli kutuları nasıl göstereceğiniz hakkında bir fikriniz var mı? İlk içgüdülerim kötüye kullanmaktı lwama görünüşe göre eksenlerle aynı birimleri kullanmıyor.
Benjamin Bannier

@BenjaminBannier Ne demek istediğinizden tam olarak emin değilim. Her noktada bir kutu çizilmesini istiyormuşsunuz gibi geliyor, yüksekliği hata çubuğununkiyle aynı, genişliği ise komşu kutuları birbirine bağlayacak (dokunacak) şekilde olmalıdır. Bu doğru mu?

1
@EL_DON Siyah çizgi + mavi şeritli bir efsane istediğinizi ve metnin "veri + 1 sigma hata bölgesi" gibi bir şey olacağını mı söylüyorsunuz?

1
@Allan, sahip olduğunuz tek hata çubukları yataysa, muhtemelen asıl probleminizin eksenlerini (ve dolayısıyla şekli de) çevirmelisiniz. Normalde bağımsız değişken, hata çubukları olmayan (veya çok küçük) olandır. Veri değişkenlerinizi değiştirerek hile yapabilir ve matplotlib'de eksenleri de değiştirebilirsiniz.

131

Bu temelde Evert tarafından verilen cevapla aynıdır , ancak bazı harika seçenekleri göstermek için genişletilmiştir.fill_between

görüntü açıklamasını buraya girin

from matplotlib import pyplot as pl
import numpy as np

pl.clf()
pl.hold(1)

x = np.linspace(0, 30, 100)
y = np.sin(x) * 0.5
pl.plot(x, y, '-k')


x = np.linspace(0, 30, 30)
y = np.sin(x/6*np.pi)
error = np.random.normal(0.1, 0.02, size=y.shape) +.1
y += np.random.normal(0, 0.1, size=y.shape)

pl.plot(x, y, 'k', color='#CC4F1B')
pl.fill_between(x, y-error, y+error,
    alpha=0.5, edgecolor='#CC4F1B', facecolor='#FF9848')

y = np.cos(x/6*np.pi)    
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#1B2ACC')
pl.fill_between(x, y-error, y+error,
    alpha=0.2, edgecolor='#1B2ACC', facecolor='#089FFF',
    linewidth=4, linestyle='dashdot', antialiased=True)



y = np.cos(x/6*np.pi)  + np.sin(x/3*np.pi)  
error = np.random.rand(len(y)) * 0.5
y += np.random.normal(0, 0.1, size=y.shape)
pl.plot(x, y, 'k', color='#3F7F4C')
pl.fill_between(x, y-error, y+error,
    alpha=1, edgecolor='#3F7F4C', facecolor='#7EFF99',
    linewidth=0)



pl.show()

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.