gpt4 book ai didi

python - matplotlib 交互式绘图(在图表上手动绘制线条)

转载 作者:太空狗 更新时间:2023-10-29 18:05:01 30 4
gpt4 key购买 nike

我已经使用 matplotlib 成功地绘制了一组日期序列数据(X 轴是日期)。但是,我希望能够在绘制的图表上手动从一个 (date1, y1) 到另一个 (date2, y2) 画线。

我似乎找不到任何示例来说明如何执行此操作 - 或者甚至找不到它是否可行。

总而言之,这就是我想要做的:

  1. 在绘制的图上画一组线
  2. 将手工绘制的线数据保存到文件
  3. 从文件中加载手动绘制的线数据(以重新创建图形)
  4. 理想情况下,我想存储有关绘制线条的“元数据”(例如颜色、线宽等)

有人可以发布一个框架片段(最好带有指向更多信息的链接),以展示我如何开始实现它(主要要求是能够在图形上手动绘制线条,然后保存/加载线条成一个情节)。

注意:“手动”是指能够通过单击一个点然后单击绘制图形中的另一个点来绘制线条。在两点之间画一条线(或简单地单击一个点并在绘制的图形上的另一个点拖动和释放鼠标)

[[更新]]

dawe,非常感谢您提供的片段。这允许我做我想做的事 - 然而,一旦在 Canvas 上绘制线条(在第二次鼠标单击后),GUI 崩溃并且我在控制台上收到此警告消息:

/usr/local/lib/python2.6/dist-packages/matplotlib/backend_bases.py:2192: DeprecationWarning: Using default event loop until function specific to this GUI is implemented
warnings.warn(str,DeprecationWarning)

您知道导致此警告和程序突然终止的原因吗?

另外,是否可以在图表上绘制多条线? (我猜这将涉及编写某种事件处理程序来实例化一个 linedrawer 变量)。目前,我有机会在“应用程序”突然终止之前只画一条线。

最佳答案

我会这样写:

import matplotlib.pyplot as plt
class LineDrawer(object):
lines = []
def draw_line(self):
ax = plt.gca()
xy = plt.ginput(2)

x = [p[0] for p in xy]
y = [p[1] for p in xy]
line = plt.plot(x,y)
ax.figure.canvas.draw()

self.lines.append(line)

使用 ginput() 可以避免更复杂的事件处理。它“工作”的方式是你绘制一些东西:

plt.plot([1,2,3,4,5])
ld = LineDrawer()
ld.draw_line() # here you click on the plot

要将行数据保存/加载到文件中,您可以使用 pickleshelve 轻松实现一个方法。您还可以通过 draw_line()

方法传递必要的元数据

关于python - matplotlib 交互式绘图(在图表上手动绘制线条),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136938/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com