yerr / xerr를 오류 막대가 아닌 음영 영역으로 플로팅


답변:


151

예제 그래프에서 점 사이의 부드러운 보간을 무시하면 (일부 수동 보간이 필요하거나 데이터의 해상도가 더 높은) 다음을 사용할 수 있습니다 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()

여기에 이미지 설명을 입력하십시오

matplotlib 예제 도 참조하십시오 .


1
완전한. 예, 부드러운 선으로 예제를 포함시키는 것은 아닙니다.
Austin Richardson

음영 밴드 대신 음영 상자를 표시하는 방법에 대한 아이디어가 있습니까? 나의 첫 번째 본능은 남용하는 lw것이었지만 축과 동일한 단위를 사용하지 않는 것 같습니다.
Benjamin Bannier

@BenjaminBannier 무슨 말인지 잘 모르겠습니다. 마치 각 점에서 상자를 그리는 것처럼 들리며 높이는 오류 막대의 높이와 같으며 너비는 인접한 상자를 연결 (터치)해야합니다. 그 맞습니까?

1
@EL_DON 당신은 검은 색 선 + 파란 띠를 가진 범례를 원하고 텍스트는 "data + 1 sigma error region"과 같을 것입니까?

1
@Allan 당신이 가지고있는 유일한 에러 바가 수평이라면, 당신은 아마도 실제 문제의 축을 뒤집어 야 할 것입니다. 일반적으로 독립 변수는 오차 막대가 없거나 매우 작은 변수입니다. 데이터 변수를 교환하여 부정 행위를 할 수 있고 matplotlib에서 축도 교환 할 수 있습니다.

131

이것은 기본적으로 Evert 에서 제공 하는 것과 동일한 대답 이지만 몇 가지 멋진 옵션을 보여줍니다.fill_between

여기에 이미지 설명을 입력하십시오

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

1
약간 더 나은 솔루션 : stackoverflow.com/questions/43064524/…
Shital Shah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.