【问题标题】:Retrieve XY data from matplotlib figure [duplicate]从matplotlib图中检索XY数据[重复]
【发布时间】:2013-12-06 12:02:05
【问题描述】:

我正在用 wxPython 编写一个小应用程序,它有一个 matplotlib 图(使用 wxagg 后端)面板。我想为用户添加将图中当前绘制的 X、Y 数据导出到文本文件的功能。有没有一种非侵入性的方法来做到这一点?我搜索了很多,似乎找不到任何东西,但我觉得它非常简单,就在我面前。

我绝对可以在绘制数据时获取数据并将其存储在某个地方,然后使用它——但这对我的代码的较低级别来说是相当具有侵入性的。如果我能做一些简单的事情,那就更容易了,也更通用了:

x = FigurePanel.axes.GetXData()
y = FigurePanel.axes.GetYData()

希望这有点道理:)

非常感谢!非常感谢任何帮助!

编辑:澄清一下,我想知道如何获取 X、Y 数据。之后写入文本文件很简单;)

【问题讨论】:

  • 我发誓我用谷歌搜索了我能想到的所有可能的单词组合,但没有遇到那个帖子!感谢您的链接。
  • 我只发现通过谷歌搜索'matplotlib get_xdata',而不是SO的标准搜索。
  • 仅供参考:通常,matplotlib 绘图函数返回一个 Artist 实例(或艺术家序列,在 plot 的情况下),其中包含数据、样式信息等。许多艺术家都有get_dataset_data 方法(例如你可以做x, y = line.get_data())。对于某些人,该方法可能被称为其他名称(例如scatter 返回一个集合,其中等效方法为get_offsets) 一些艺术家(例如ContourSets)不包含对原始输入数据的引用,但这相当罕见。基本上,您希望保留绘图函数的输出。

标签: python matplotlib wxpython


【解决方案1】:

这行得通:

In [1]: import matplotlib.pyplot as plt

In [2]: plt.plot([1,2,3],[4,5,6])
Out[2]: [<matplotlib.lines.Line2D at 0x30b2b10>]

In [3]: ax = plt.gca() # get axis handle

In [4]: line = ax.lines[0] # get the first line, there might be more

In [5]: line.get_xdata()
Out[5]: array([1, 2, 3])

In [6]: line.get_ydata()
Out[6]: array([4, 5, 6])

In [7]: line.get_xydata()
Out[7]: 
array([[ 1.,  4.],
       [ 2.,  5.],
       [ 3.,  6.]])

我通过在轴对象中四处挖掘找到了这些。我只能找到一些关于这些函数的minimal information,显然你可以给它们一个布尔标志来获取原始数据或处理过的数据,不知道是什么意思。

编辑:Joe Kington 展示了一种更简洁的方法:

In [1]: import matplotlib.pyplot as plt

In [2]: lines = plt.plot([1,2,3],[4,5,6],[7,8],[9,10])

In [3]: lines[0].get_data()
Out[3]: (array([1, 2, 3]), array([4, 5, 6]))

In [4]: lines[1].get_data()
Out[4]: (array([7, 8]), array([ 9, 10]))

【讨论】:

  • 像魅力一样工作。对于未来的读者,我还将添加 line.get_label() 也返回与 line 对象关联的标签;)再次感谢!
  • 为什么mpl_toolkits.mplot3d.art3d.Line3D object 没有get_zdata()?我无法提取 z 值。 :-(
猜你喜欢
  • 2022-06-22
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2021-12-14
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
相关资源
最近更新 更多