Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ipywidget的具有两个参数和相互依赖数据的交互式绘图_Python_Matplotlib_Jupyter Notebook_Ipywidgets - Fatal编程技术网

Python 使用ipywidget的具有两个参数和相互依赖数据的交互式绘图

Python 使用ipywidget的具有两个参数和相互依赖数据的交互式绘图,python,matplotlib,jupyter-notebook,ipywidgets,Python,Matplotlib,Jupyter Notebook,Ipywidgets,我想创建一个jupyter笔记本单元,显示与matplotlib的交互绘图,以说明噪声信号的平滑。在下面的例子中,我使用的是来自scikit图像的高斯滤波器。我想的噪音水平以及平滑度是由滑块调整。为此,我使用了ipywidgets 最初我尝试了以下方法 将IPyWidget作为小部件导入 将matplotlib.pyplot作为plt导入 将numpy作为np导入 进口撇渣 %matplotlib内联 def绘图_噪声_滤波器(信号、CNT、西格玛): s=信号/np.和(信号)*cnts#将信

我想创建一个jupyter笔记本单元,显示与matplotlib的交互绘图,以说明噪声信号的平滑。在下面的例子中,我使用的是来自scikit图像的高斯滤波器。我想的噪音水平以及平滑度是由滑块调整。为此,我使用了ipywidgets

最初我尝试了以下方法

将IPyWidget作为小部件导入
将matplotlib.pyplot作为plt导入
将numpy作为np导入
进口撇渣
%matplotlib内联
def绘图_噪声_滤波器(信号、CNT、西格玛):
s=信号/np.和(信号)*cnts#将信号规格化以具有cnts计数
噪声=np.随机.泊松#随机产生泊松噪声
滤波=撇除。滤波器。高斯(噪声,西格玛)#用高斯滤波器过滤噪声信号
f、 ax=plt.子地块()#绘图
最大图(噪声/最大净功率(噪声))
ax.图(过滤后的/np.最大值(过滤后))
c_slide=widgets.IntSlider(最小值=100,最大值=10000,步长=10,description='counts')
s_slide=widgets.IntSlider(最小值=1,最大值=100,说明='smoothing')
sig=np.heaviside(np.linspace(-1,1100),1)+1
widgets.interactive(plot\u noise\u filter,sig=widgets.fixed,cnts=c\u slide,sigma=s\u slide)
原则上,这会给出所需的绘图,但现在每次我使用滑块
s_slide
,都会调用该函数并生成一个新的随机信号,即使计数没有改变。我希望只有当相应的滑块移动时,绘图中的噪声信号才会改变

我能想到的唯一解决办法是,在数组中预先计算和存储噪声信号,并根据滑块拾取该数组的元素,但这不是很优雅,可能会消耗大量内存

我当前的安装使用的是conda和python 3.7.3

ipywidgets                7.5.1
matplotlib                3.1.1
jupyter                   1.0.0
jupyter_client            5.3.1
jupyter_console           6.0.0
jupyter_core              4.4.0
notebook                  6.0.1
numpy                     1.17.2

欢迎任何帮助。提前谢谢

首先,感谢您提供了一个非常清晰且可运行的示例

如何使用
lru\u cache
将信号和噪声生成线提取到缓存函数中?然后,对于给定的
信号
cnts
输入,此部分将始终返回相同的值,仅在移动滑块时更改平滑

将IPyWidget作为小部件导入
将matplotlib.pyplot作为plt导入
将numpy作为np导入
进口撇渣
%matplotlib内联
从functools导入lru\U缓存
@lru_缓存(32)
def制造信号噪声(信号、CNT):
s=信号/np.和(信号)*cnts#将信号规格化以具有cnts计数
噪声=np.随机.泊松#随机产生泊松噪声
回音、杂音
def绘图_噪声_滤波器(信号、CNT、西格玛):
s、 噪声=制造噪声(元组(信号),CNT)
滤波=撇除。滤波器。高斯(噪声,西格玛)#用高斯滤波器过滤噪声信号
f、 ax=plt.子地块()#绘图
最大图(噪声/最大净功率(噪声))
ax.图(过滤后的/np.最大值(过滤后))
c_slide=widgets.IntSlider(最小值=100,最大值=10000,步长=10,description='counts')
s_slide=widgets.IntSlider(最小值=1,最大值=100,说明='smoothing')
sig=np.heaviside(np.linspace(-1,1100),1)+1
widgets.interactive(plot\u noise\u filter,sig=widgets.fixed,cnts=c\u slide,sigma=s\u slide)

首先,感谢您提供了非常清晰且可运行的示例

如何使用
lru\u cache
将信号和噪声生成线提取到缓存函数中?然后,对于给定的
信号
cnts
输入,此部分将始终返回相同的值,仅在移动滑块时更改平滑

将IPyWidget作为小部件导入
将matplotlib.pyplot作为plt导入
将numpy作为np导入
进口撇渣
%matplotlib内联
从functools导入lru\U缓存
@lru_缓存(32)
def制造信号噪声(信号、CNT):
s=信号/np.和(信号)*cnts#将信号规格化以具有cnts计数
噪声=np.随机.泊松#随机产生泊松噪声
回音、杂音
def绘图_噪声_滤波器(信号、CNT、西格玛):
s、 噪声=制造噪声(元组(信号),CNT)
滤波=撇除。滤波器。高斯(噪声,西格玛)#用高斯滤波器过滤噪声信号
f、 ax=plt.子地块()#绘图
最大图(噪声/最大净功率(噪声))
ax.图(过滤后的/np.最大值(过滤后))
c_slide=widgets.IntSlider(最小值=100,最大值=10000,步长=10,description='counts')
s_slide=widgets.IntSlider(最小值=1,最大值=100,说明='smoothing')
sig=np.heaviside(np.linspace(-1,1100),1)+1
widgets.interactive(plot\u noise\u filter,sig=widgets.fixed,cnts=c\u slide,sigma=s\u slide)