2012-06-14 5 views
1

서브 플롯 (self.intensity)의 경우 그래프 아래의 영역을 음영 처리하고 싶습니다. matplotlib의 곡선 아래에서 그려 내기

나는 올바른 구문 바라고,이 시도 : 나는 (l,r) 정수 범위 내에서 projection NumPy와 배열에 대해 음영을 수행하는 것처럼 의도

self.intensity.fill_between(arange(l,r), 0, projection) 

.

하지만 오류가 발생합니다. 어떻게 올바르게 할 수 있습니까?


Heres는 역 추적 : 당신이 L에서 R에 투사의 부분을 채우기 위해 노력하고있다처럼

Traceback (most recent call last): 
    File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_wx.py", line 1289, in _onLeftButtonDown 
    FigureCanvasBase.button_press_event(self, x, y, 1, guiEvent=evt) 
    File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 1576, in button_press_event 
    self.callbacks.process(s, mouseevent) 
    File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 265, in process 
    proxy(*args, **kwargs) 
    File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 191, in __call__ 
    return mtd(*args, **kwargs) 
    File "/root/dev/spectrum/spectrum/plot_handler.py", line 55, in _onclick 
    self._call_click_callback(event.xdata) 
    File "/root/dev/spectrum/spectrum/plot_handler.py", line 66, in _call_click_callback 
    self.__click_callback(data) 
    File "/root/dev/spectrum/spectrum/plot_handler.py", line 186, in _on_plot_click 
    band_data = self._band_data) 
    File "/root/dev/spectrum/spectrum/plot_handler.py", line 95, in draw 
    self.intensity.fill_between(arange(l,r), 0, projection) 
    File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 6457, in fill_between 
    raise ValueError("Argument dimensions are incompatible") 
ValueError: Argument dimensions are incompatible 
+0

우리는 그것보다 좀 더 정보가 필요합니다 : 이전 방법

, 아래의 예제 코드를 참조하십시오. 'l', 'r'및 'projection'은 무엇입니까? 추적은'arange (l, r)'이'projection'과 같은 길이가 아니라는 것을 알려줍니다. 'arange', 즉'arange (l, r + 1)'에 의해 생성 된 시퀀스에'r'의 값을 넣으려고했다는 뜻입니까? – Chris

+0

내 질문이 수정되었습니다. 관련 정보가 모두 포함 되었기를 바랍니다. 그리고 그것은'scipy.arange'가 글로벌 네임 스페이스로 가져 왔습니다. 그리고 나는'투영 '을위한 한계를 만들어내는'arange'를 원한다. – aitchnyu

답변

3

보인다. fill_between는 x와 y 배열의 길이가 동일 할 것으로 예상하므로 곡선의 일부만 채울 것으로 예상 할 수 없습니다.

원하는 것을 얻으려면 다음 중 하나를 수행하십시오. 1. 채우기가 필요한 투영의 일부만 명령으로 보내십시오. 나머지 투영을 개별적으로 그립니다. 2. 채울 섹션을 정의하는 인수로 별도의 부울 배열을 보냅니다. documentation!

from pylab import * 

a = subplot(111) 

t = arange(1, 100)/50. 
projection = sin(2*pi*t) 

# Draw the original curve 
a.plot(t, projection) 
# Define areas to fill in 
l, r = 10, 50 
# Fill the areas 
a.fill_between(t[l:r], projection[l:r]) 
show() 
+0

대단하다! 'projection [l : r]'을 사용하여 고정 시켰습니다! – aitchnyu