带有两个滑块的交互式 matplotlib 绘图
我使用 matplotlib 创建了一些图,该图取决于 8 个变量。我想研究一下当我改变其中一些内容时情节如何变化。我创建了一些脚本,调用 matplotlib 脚本并生成不同的快照,然后将其转换成电影,这还不错,但有点笨拙。
我想知道是否可以使用键盘按键与绘图重新生成进行交互,以增加/减少某些变量的值,并立即查看绘图如何变化。
最好的方法是什么?
此外,您是否可以向我指出有趣的链接或仅包含两个滑块的绘图示例的链接?
I used matplotlib to create some plot, which depends on 8 variables. I would like to study how the plot changes when I change some of them. I created some script that calls the matplotlib one and generates different snapshots that later I convert into a movie, it is not bad, but a bit clumsy.
I wonder if somehow I could interact with the plot regeneration using keyboard keys to increase / decrease values of some of the variables and see instantly how the plot changes.
What is the best approach for this?
Also if you can point me to interesting links or a link with a plot example with just two sliders?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
除了 @triplepoint 提到的之外,还可以看看滑块小部件。
matplotlib 示例页面上有一个示例。它是一个图形滑块而不是键盘绑定,但它非常适合您想要做的事情。
另请注意,为了保证滑块和按钮保持响应且不会被垃圾收集,对对象(
amp_slider
、freq_slider
等)的引用应由您自己维护。(我正在制作这个社区 wiki,因为我只是从示例中复制粘贴。
这个特定示例教导了坏习惯(例如该示例已修复,以避免使用from pylab import *
),但它明白了要点pylab
。)In addition to what @triplepoint mentioned, have a look at the slider widget.
There's an example on the matplotlib examples page. It's a graphical slider bar rather than keyboard bindings, but it works quite well for what you want to do.
Also note that to guarantee the sliders and buttons remain responsive and not garbage-collected, references to the objects (
amp_slider
,freq_slider
, etc.) should be maintained by yourself.(I'm making this community wiki, as I'm just copy-pasting from the example.
This particular example teaches bad habits (e.g.The example has been fixed to avoid the use offrom pylab import *
), but it gets the point across.pylab
.)我按照建议检查了 jupyter 中的小部件,它们工作得很好。
示例脚本上传到 GitHub https://github。 com/LeonidBystrykh/course-python-for-beginners/blob/master/Interactive_dots.ipynb
图像副本位于
I followed the advice to check widgets in jupyter, and they work very well.
The example script is uploaded in GitHub https://github.com/LeonidBystrykh/course-python-for-beginners/blob/master/Interactive_dots.ipynb
The image copy is below
Matplotlib 有一些相当不错的 GUI 功能。 matplotlib 的源 tarball 中有一些文档示例,位于 /examples/user_interfaces 和 matplotlib>/examples/event_handling 中。具体的按键处理是:http://matplotlib.sourceforge.net/examples/event_handling/keypress_demo。 html
我做了一些类似于你的目标的事情:
我用它来切换在按键时在堆栈中显示不同的图像,但是你应该能够放置逻辑来修改给定键盘输入的值。
如果您想做诸如拥有用户输入值之类的事情,我认为这些示例具有对话框选项,但如果您只想增加/减少一些变量,那么以这种方式为它们定义键盘对可能会很好用
Matplotlib has some fairly nice gui functionality. There are some documentation examples in the source tarball of matplotlib, in /examples/user_interfaces and matplotlib>/examples/event_handling. Specifically on keyhandling is: http://matplotlib.sourceforge.net/examples/event_handling/keypress_demo.html
I have done something kind of similar to what you are aiming for:
I was using this to shift through displaying different images in a stack on keypresses, but you should be able to put logic in to modify your values given keyboard input.
If you want to do things like have the user input values, I think the examples have options for dialog boxes, but if you just want to increment/decrement a number of variables, just defining keyboard pairs for them in this manner might work well
对于 ipython 或 jupyter 笔记本,您可以使用 ipywidgets:
请参阅此处的文档:
https://ipywidgets.readthedocs.io/en/stable/examples/Using %20Interact.html
For ipython or jupyter notebooks you can use ipywidgets:
See documentation here:
https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html
使用
waitforbuttonpress(timeout=0.001)
然后绘图将看到您的鼠标滴答声。Use
waitforbuttonpress(timeout=0.001)
then plot will see your mouse ticks.您还可以考虑使用 Quibbler 软件包。
Quibbler 自动使您的普通 matplotlib 图形具有交互性。无需编写回调函数。
请参阅 Quibbler 文档中的一些示例。特别是,请参阅带有两个滑块的绘图的具体示例。
为了透明起见:我是《唱唱反调》的开发者之一。
You could also consider using the Quibbler package.
Quibbler automatically makes your normal matplotlib graphics interactive. There is no need to write callback functions.
See some examples in the Quibbler docs. In particular, see a specific example of a plot with two sliders.
For transparency: I am one of the developers of Quibbler.
我不认为简单地使用 plt.plot 绘制图表就可以让您做到这一点。您需要通过将 Matplotlib 嵌入其中来自己制作自定义 GUI 脚本/应用程序。目前,Matplotlib 支持所有主要的 GUI 工具包 - PyGTK+、PyQt4 和 wxPython。
我使用 wxPython 并且在其中嵌入 matplotlib 相当容易。其他 GUI 工具包的情况也应该类似。您可以在书中获得所需的所有信息 -
可在亚马逊上购买 此处。
I don't think that simply plotting graphs using
plt.plot
will allow you to do this. You will need to yourself make a custom GUI script/app by embedding Matplotlib into it. Currently, Matplotlib supports all the major GUI toolkits - PyGTK+, PyQt4 and wxPython.I use wxPython and embedding matplotlib in it is fairly easy. Similar should be case with the other GUI toolkits. You can get all the information you need for this in the book -
It is available on amazon here.