' matplotlib '在面板行中可点击绘图



我已经弄清楚如何使matplotlib图形可点击,以便我可以单击一个点并根据该点的元数据创建一个新的绘图,遵循这里的答案。

现在是时候把可点击的情节在Panel仪表板。显而易见的做法是将该数字添加到panel.Row中。虽然这显示了图形,但我没有得到交互性。

import matplotlib.pyplot as plt
import panel as pn
class custom_objects_to_plot:
def __init__(self, x, y, name):
self.x = x
self.y = y
self.name = name
a = custom_objects_to_plot(10, 20, "a")
b = custom_objects_to_plot(30, 5, "b")
c = custom_objects_to_plot(40, 30, "c")
d = custom_objects_to_plot(120, 10, "d")
def on_pick(event):
my_fig, my_ax = plt.subplots() # New plot with unique name
my_ax.scatter([1, 2, 3, 4], [5, 6, 7, 8]) # Make the scatterplot
my_fig.show() # Show the plot
fig, ax = plt.subplots()
for obj in [a, b, c, d]:
artist = ax.plot(obj.x, obj.y, 'ro', picker=5)[0]
artist.obj = obj
fig.canvas.callbacks.connect('pick_event', on_pick)
my_row = pn.Row()
my_row.append(fig)
my_row.show()

我如何让交互式(可点击)绘图显示,就像它出现时,我从命令行运行?

我不太熟悉panel,但我在他们的git上发现了这个开放问题:

https://github.com/holoviz/panel/issues/2349

问题说明:

我喜欢用matplotlib构建交互式gui,大量使用matplotlib事件,例如button_press_event, motion_notify_event等。目前这在Panel中是不可能的,因为Matplotlib基本上是作为静态图像处理的,当对象发生变化时可以重新绘制。

我还检查了文档,以及对开放问题的几个新更新,看起来通过ipympl添加了一些功能,您可以使用交互式后端,但我不知道它是如何充实的。我假设它看起来像这样,但我可以在今晚晚些时候测试它。

fig.canvas.callbacks.connect('pick_event', on_pick)
mpl_pane = pn.pane.Matplotlib(fig, interactive=True)
my_row = pn.Row(mpl_pane)
my_row.show()

只是好奇,但它是否必须使用面板,或者将另一个python GUI工作?我知道如何在其他python GUI框架中做到这一点。

相关内容

  • 没有找到相关文章

最新更新