我已经使用 matplotlib 成功绘制了一组日期排序数据(X 轴是日期)。但是,我希望能够manually在绘制的图表上从一个 (date1, y1) 到另一个 (date2, y2) 绘制线条。
我似乎找不到任何例子来说明如何做到这一点 - 或者实际上是否可行。
总而言之,这就是我想做的:
- 在绘制的图表上绘制一组线
- 将手动绘制的线条数据保存到文件中
- 从文件加载手动绘制的线条数据(以重新创建图形)
- 理想情况下,我想存储有关绘制线条的“元数据”(例如颜色、线宽等)
有人可以发布一个骨架片段(最好带有更多信息的链接),以展示我如何开始实现这个(主要要求是能够在图表上手动绘制线条,然后将线条保存/加载到图中) )。
Note:通过“手动”,我的意思是能够通过单击一个点,然后单击绘制的图表中的另一个点来绘制线条。在两点之间画一条线(或者简单地单击一个点,然后在绘制的图表上的另一个点上拖动并释放鼠标)
[[更新]]
dawe,非常感谢您提供的片段。这允许我做我想做的事情 - 但是,一旦在画布上绘制线条(第二次单击鼠标后),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)
Using ginput()
您可以避免更复杂的事件处理。它“工作”的方式是你绘制一些东西:
plt.plot([1,2,3,4,5])
ld = LineDrawer()
ld.draw_line() # here you click on the plot
为了将行数据保存/加载到文件中,您可以使用以下方法轻松实现方法pickle
or shelve
。您还可以通过该方法传递必要的元数据draw_line()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)