我怎么知道哪个ax是在交互式shiny for python plot上选择的?



我想生成一个具有多个子图的图形它具有基本的交互性;点击、悬停等…

下面是一个来自官方文档的带有单个子图的图的示例:https://shinylive.io/py/examples/#basic-plot-interaction.

我如何识别哪个ax在一个有多个子图的图形上悬停?

下面是一个通过悬停发送JSON的示例:

{
"x": 3.5142333228259792,
"y": 15.062603892154872,
"coords_css": {
"x": 440,
"y": 289
},
"coords_img": {
"x": 445.2547771977413,
"y": 289
},
"img_css_ratio": {
"x": 1.011942675449412,
"y": 1
},
"mapping": {
"x": null,
"y": null
},
"domain": {
"left": 1.3174499999999998,
"right": 5.61955,
"bottom": 9.225,
"top": 35.074999999999996
},
"range": {
"left": 40.73333333333335,
"right": 832.9333129882813,
"bottom": 363.26666666666665,
"top": 34.400000000000034
},
"log": {
"x": null,
"y": null
}
}

但是,对于具有多个子图的图形,该JSON缺少关于悬停在哪个子图上的信息。(在结构上与上面的JSON相同)。

"range"包含悬浮在其上的子图的范围(以像素为单位)。显然,这是有用的信息。如果你知道x和y的完整范围,以及坐标轴的比例,你可能可以反向计算。

但是我看不到任何函数/方法在闪亮的python API返回整个数字的范围。(我认为整个图形的范围必须在每次悬停事件中检查,给定窗口,因此图形可能已经调整了大小)。

这似乎是一个有用的功能,也许有一个更简单的方法?

TL;DR在服务器端分别生成每个plot,并使用CSS进行绑定

一种选择是有单独的绘图(与子绘图相同),并在正面绑定CSS网格/flex。您将在服务器端单独生成每个图(单独的输出),因此可以在每个图的唯一id下访问包含数据的JSON。

另一个想法是从坐标中获得子图中的选定图。如果您知道尺寸(固定的或动态的)和网格结构,那么您可以很容易地编写一个函数来为您获得选定的绘图。这个解决方案似乎不太稳定。