2012-06-14 65 views
1

对于子图(self.intensity),我想遮蔽图下的区域。在matplotlib中的曲线下绘图

我想这一点,希望这是正确的语法:

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

我打算以用于内(l,r)整数限制projection numpy的阵列做阴影。

但它给了我一个错误。我如何正确地做到这一点?


继承人的回溯:

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'生成的序列中包含'r'的值,即'arange(l,r + 1)'? – 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