Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 使用滑块更新等距网格中的值_Python_Numpy_Mesh_Ipywidgets - Fatal编程技术网

Python 使用滑块更新等距网格中的值

Python 使用滑块更新等距网格中的值,python,numpy,mesh,ipywidgets,Python,Numpy,Mesh,Ipywidgets,我面临的问题是,当我使用滑块增加/减少值时,我无法确定如何更新图形 我正在创建一个x,y网格,然后打印它,并更新数组中的值以定义一个新网格。我希望能够移动滑块,看到更细/更粗的网格,并更新绘图和轴 此外,我希望用户能够使用鼠标以交互方式移动网格线。示例代码中不包括此项。有人知道如何实现这一点吗 关于使用滑块更新绘图上的值,也有类似的问题,但可能没有一个解决这个特定问题;有人能帮我找出我做错了什么吗?我意识到我没有任何东西可以重新绘制绘图(尽管我已经测试了各种东西),但我不确定如何实现这一点,因为

我面临的问题是,当我使用滑块增加/减少值时,我无法确定如何更新图形

我正在创建一个x,y网格,然后打印它,并更新数组中的值以定义一个新网格。我希望能够移动滑块,看到更细/更粗的网格,并更新绘图和轴

此外,我希望用户能够使用鼠标以交互方式移动网格线。示例代码中不包括此项。有人知道如何实现这一点吗

关于使用滑块更新绘图上的值,也有类似的问题,但可能没有一个解决这个特定问题;有人能帮我找出我做错了什么吗?我意识到我没有任何东西可以重新绘制绘图(尽管我已经测试了各种东西),但我不确定如何实现这一点,因为M.plotGrid()创建了网格,所以它可能/可能不像使用fig.canvas.draw_idle()那么简单

这是我的密码:

#Create simple evenly spaced mesh and allow slider to change values

from SimPEG import Mesh, np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons

hx = np.r_[0.1,0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
hy = np.r_[0.1,0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]

M = Mesh.TensorMesh([hx, hy])
M.plotGrid()

#Define slider location, size, and color for adjusting mesh values
axhx = plt.axes([0.25, 0.1, 0.65, 0.03])
axhy = plt.axes([0.25, 0.15, 0.65, 0.03])
xnode_inc = Slider(axhx, 'X mesh Node', 0.1, 1000.0, valinit=0)
anode_inc = Slider(axhy, 'Y mesh Node', 0.1, 1000.0, valinit=0)

def update(val):
    framehx = xnode_inc.val + hx
    framehy = ynode_inc.val + hy
    M = Mesh.TensorMesh([framehx, framehy])
    print M, framehx, framehy
    M.plotGrid()

xnode_inc.on_changed(update)
ynode_inc.on_changed(update)

plt.show()

我只能给出一个交互式更改
numpy
网格的示例,因为我没有使用
SimPEG
。该示例位于Ipython/Jupyter笔记本中。这是目前生成交互式滑块、下拉列表、单选按钮等的最简单方法,即与原始matplotlib滑块的类似设置的复杂设置相比有了很大改进。为了简单起见,我为彩色地图添加了一个组合框

import numpy as np
import matplotlib.pyplot as p
from ipywidgets import *
%matplotlib inline


def gridandplot(dx,mp):
    x=np.arange(0,5,dx)
    y=np.arange(0,5,dx)
    x,y=np.meshgrid(x,y)
    z= np.sin(x)* np.cos(y)
    if mp=='gray':
        cmap=p.cm.gray
    else:
        cmap= p.cm.jet
    p.imshow(z,interpolation='none',cmap=cmap)

interact(gridandplot, dx=(0.005,0.2,0.001), mp= ('gray','jet'))


我看不出代码中有问题。设置滑块的所有元素都在那里(轴、滑块、更新函数、更改事件、显示)。在新的Ipython/Jupyter笔记本中使用ipywidgets中的滑块非常简单。可以吗?另外,您能否提出一个不依赖于
SimPEG
,只依赖于
numpy
的示例?问题可能是
np.around
,顺便说一句。试一下
np.around(sx,小数=1)
np.around(sx)-->…(sx.val)
我想看得更多,我想我的问题可能是如何定义l。我把sx.val和sy.val放在np.around中。让我看看我是否可以在没有SimPEG的情况下变出一些东西,但是如果你有matplotlib、numpy、scipy和cython,使用pip/git添加SimPEG是非常简单的。我没有将示例更改为仅包含numpy的内容,而是实现了一些更改,这些更改现在会在移动滑块时更新数组中的值。我现在唯一的问题是,它不会随着值的更改而更新图形。有什么想法吗?@roadrunner66你能想象出使用ipywidgets的例子吗?如果ipywidgets/jupyter更简单的话,我会对它们感兴趣。我试图安装它们,但得到了以下错误:traitlets.traitlets.TraitError:Comm实例的“内核”特征必须是内核,但指定了类型为“NoneType”(即None)的值。有什么问题吗?我没见过。所以你用“ipython笔记本”或“jupyter笔记本”开始笔记本,你就得到了网页,对吗?什么时候会出现错误?比如说,导入numpy语句有效吗?如果我在终端中键入jupiter notebook,我会得到网页。我可以调出脚本,但我不知道如何从笔记本上运行它。我在终端中键入python script.py时出现内核错误。您只需将这些行粘贴到笔记本中。只是一个细胞,我发现问题是我的内核死了。我再次测试了它,效果很好。我仍在尝试将我的示例捏造成交互式,以使其按我所希望的方式工作。我还能够解决使用matplotlib滑块更新图形的问题。我正在尝试互动,看看什么可能更容易。