问题标签 [pyviz]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - DynamicMap 可调用是否总是必须返回相同的类型?
下面的代码看起来好像传递给 DynamicMap 的可调用对象不能更改元素类型。当将类别小部件更改B
为Curve
元素时,返回而不是Points
,但绘图只是空的。是否不支持这种行为,或者是否opts
需要一些魔法才能使其工作?
python-3.x - 如何在 Pyviz 面板应用程序中成功生成马赛克图?
我创建了以下数据框df
:
设置:
问题:
我可以使用以下代码成功创建马赛克图:
但是,当我尝试使用以下方法创建相应的应用程序时遇到问题pn.interact
:
结果如下:
上面渲染的马赛克图似乎对应于 x & y 的默认值(即sex
& age_band
)。当您从下拉列表中为 x 或 y 选择新属性时,马赛克图上方的文本会发生变化(此文本似乎是图的字符串表示形式),但马赛克图本身不会。
我的问题可能与必须注释掉 pn.extension() 有关吗?我发现当 pn.extension() 没有被注释掉时,它会导致间歇性的 javascript 错误,有时不会引发错误,有时会出现错误,但我的面板应用程序仍然会加载,有时会出现错误并崩溃我的浏览器。(我在这里省略了 javascript 错误,因为它可能非常大 - 如果它有帮助,我可以将它添加到我的帖子中。)我会说这个错误被提出的次数比没有发生的要多得多。
奇怪的是,在我创建的其他应用程序中,我没有观察到我省略 pn.extension() 与包含它的任何区别。但是,由于文档始终指定您包含它,我原以为我必须设置适当的扩展才能使所有绘图正常工作?(我已经在这些其他应用程序中成功地绘制了 plotly、hvplot、holoviews 和 geoviews 绘图,包括和不包括 pn.extension() 和 pn.extension("plotly"))。
是否可以根据马赛克图制作面板应用程序?
谢谢
软件信息:
pyviz - panel.pane.Audio 元素的自定义
有没有办法自定义 panel.pane.Audio 元素?我尝试传递诸如宽度或高度之类的参数,例如:
但作为散景应用程序启动后没有效果。
这是一些可用的代码:
我从命令行启动应用程序
目标是让音频元素与上图一样宽。现在它看起来像那个散景应用程序
关于如何完成这项工作的任何想法,而无需深入研究面板的 javascript 部分?提前致谢。
bokeh - 如何使用 Panel/PyViz 同时提供多个应用程序?
我一直在探索如何编写一套小型实用程序但将它们一起提供服务的问题。这就像编写多个小 .py 文件,每个文件都为我们提供了一个面板应用程序,但我想通过具有单个入口点的单个 Docker 容器来提供它们。
Voila 让我们能够利用其 jupyter 扩展来提供多个笔记本;面板有类似的可能吗?例如,我想知道是否可以panel serve . [--options]
提供目录中的所有 .py 文件?
holoviews - 如何在 holoviews 布局中对齐网格空间图?
如果 holoviews 布局包含 Gridspace 组件,我很难理解它是如何工作的。在下面的示例中,我有 2 个作为 Gridspace 返回的简单图。虽然它们显示得很好,但我想将它们对齐在右边缘。根据文档,这应该通过将align='end'
选项传递给布局中的相应组件来完成 - 但是这会导致ValueError: Unexpected option 'align' for GridSpace type across all extensions. No similar options found.
错误。
.opts(align='end)
除了左边的对齐之外,这将正常工作:没有对齐的绘图
如果有人知道这是网格空间的限制还是我只是使用了错误的选项,那就太好了。
python - 用于 hv.Graph 边缘的单独 TAP 和 HOVER 工具。缺少边缘描述数据
试图获得能够与节点分开挖掘边的 hv 图。就我而言 - 所有有意义的数据都绑定到边缘。
如果我使用gGraph.edgepaths * gGraph.nodes
- 悬停工具不会显示边缘信息。检查策略“边缘”hv.Graph
不适合我的任务,因为没有可用的单一边缘选择。edgepaths 属性中的边缘标签信息去哪了?如何添加它?谢谢!
holoviews - 将值添加到 hvplot 中的分组条形图
我正在尝试将标签添加到分组的 hvplot barchart。
我的示例数据框具有以下结构:
条形图是使用以下代码创建的:
但是两个图的叠加
导致错误,尽管尺寸对我来说似乎相同。
对解决方案的任何提示表示赞赏。谢谢!
python - 在包含标题的 hv.Div 元素下方的布局中移动 Holoviews 图表元素
我有一个 hv.Div 元素,其中包含有关我正在处理的报告标题的文本。当我将我的 holoview 图表元素与 hv.Div 元素组合在一起时,我似乎无法将图表元素推到 hv.div 元素下方。有谁知道如何做到这一点?我已经使用 hv.Layout 和 .cols(n) 尝试了几种排列,但我似乎无法将图表推到标题下方。
下面的示例代码:
谢谢!
python-3.x - Pyviz Panel app.show() 在远程使用 Jupyter Notebook 时不起作用
我在 Ubuntu 服务器上的 CentOS VM 上安装了 Anaconda。然后,我在这个 VM 上为我的所有 python 数据科学库创建了一个 conda 环境。我的笔记本电脑上有一个匹配的 conda 环境。
然后,我按照本指南允许我在笔记本电脑上远程使用 Jupyter 笔记本在服务器上执行数据分析:https ://amber-md.github.io/pytraj/latest/tutorials/remote_jupyter_notebook
我能够在我的笔记本电脑上成功加载我的 Jupyter 笔记本并在服务器上执行分析。我还可以将我完成的应用程序标记为.servable()
笔记本,然后panel serve --show ...
在 VM 终端上使用,通过 Web 浏览器将完成的交互式应用程序提供给 LAN 用户。
我的问题是,当我使用标记我的应用程序.show()
以允许我查看我当前在笔记本中处理的应用程序/报告时,我收到以下消息输出:<bokeh.server.server.Server at 0x7faa92ef5590>
但应用程序未按预期加载到新的浏览器选项卡中.
app.show()
远程而不是本地使用 Jupyter 笔记本时如何工作?
更新 23/01/20 以响应 @SandervandenOord 的回答: “您需要为 .show() 指定端口并确保用户可以访问远程服务器上的该端口”
为了说明这个问题(不是实际情况),假设我的服务器 VM 是地址192.168.0.1,我的笔记本电脑是192.168.0.2,我想使用的端口app.show()
是3333。
1.设置端口:
在服务器上(192.168.0.1):
- 检查端口 3333是否未被使用:
sudo lsof -i:3333
- 检查 iptables 是否未将端口显示为打开:
sudo iptables-save | grep 3333
- 将端口添加到/etc/services文件:
sudo nano /etc/services
- 我将以下行添加到文件顶部并保存:
- 启用防火墙:
sudo systemctl enable firewalld
- 启动防火墙:
sudo systemctl start firewalld
- 检查防火墙的状态:
sudo systemctl status firewalld
确认此端口现在已打开:
sudo iptables-save | grep 3333
输出:
-A IN_public_allow -p tcp -m tcp --dport 3333 -m conntrack --ctstate NEW -j ACCEPT
- 测试用户是否可以访问服务器上的端口:
我在服务器上安装了ncat(192.168.0.1):
sudo yum install nmap-ncat -y
然后我在服务器和我的笔记本电脑之间设置消息传递:
- 在服务器上:
nc -l 3333
- 在笔记本电脑上:
nc 192.168.0.1 3333
以及笔记本电脑和服务器之间:
- 在笔记本电脑上:
nc -l 3333
在服务器上:
nc 192.168.0.2 3333
消息成功地从服务器传输到笔记本电脑,反之亦然。
确认这两个连接:
sudo lsof -i:3333
输出:
显示端口 3333 上的服务器可以与不同端口上的笔记本电脑通信,端口 3333 上的笔记本电脑可以与不同端口上的服务器通信。
我不确定如何让它们连接到同一个端口?即都在端口 3333 上?这是我问题的根源吗?
- 然后在我的jupyter笔记本中,我替换
app.show()
为
但是,我仍然遇到与以前相同的行为,即应用程序未按预期加载到新的浏览器选项卡中。
然后我尝试了参数websocket_origin
(尝试了“192.168.0.1”、“192.168.0.2”和“*”)和threaded
(真/假),但更改这些参数并没有给出我想要的应用程序在新浏览器选项卡中加载的结果。
几个有趣的点:
1. 如果我运行我的笔记本,它执行
然后在服务器上运行:
sudo lsof -i:3333
然后返回以下内容:
似乎服务器正在等待端口 3333 上发生的事情?即听?与我在服务器和我的笔记本电脑之间发送消息时(反之亦然)不同,实际上似乎并没有建立连接。
请注意,上面的 2 行仅在我运行笔记本后才会出现。
- 在我执行了我的笔记本后(并且新选项卡中的应用程序尚未打开),如果我尝试再次执行该笔记本,那么我会在我的 jupyter 笔记本中收到此警告:
OSError: [Errno 98] Address already in use
所以看起来服务器和笔记本电脑之间的连接已经建立或至少保留了?为了解决这个问题,我必须关闭与服务器的连接,然后在我的笔记本电脑上运行命令:
lsof -ti:8888 | xargs kill -1
然后根据https://amber-md.github.io/pytraj/重新建立服务器和笔记本电脑之间的连接最新/教程/remote_jupyter_notebook
@SandervandenOord 你对我接下来可以尝试什么有任何指示吗?
提前谢谢了。
VM 上 conda 环境中的软件版本: