【问题标题】:How to extract data from pyplot figure如何从pyplot图中提取数据
【发布时间】:2016-11-15 06:53:18
【问题描述】:

I already checked out this question, but it didn't solve my problem.

你好!我有一个 pyplot 图:

def foo(数据): 图,斧头 = plt。子图(figsize=(20, 10), dpi=100)

    xaxis = (list with x values)
    yaxis = (numpy array with y values)
    ax.plot(xaxis, yaxis)

我希望 foo() 返回 x 和 y 值。我知道我可以这样做

return xvalues, yvalues

但我想从图中提取数据。

我已尽力阅读 pyplot 文档,但我对它还是很陌生,所以如果我在做一些愚蠢的事情,请告诉我!

编辑:抱歉,我描述的不够充分。我正在尝试为模块编写单元测试,其中一种方法是生成和保存图形。 foo() 不一定要返回 x 和 y 数据,我只是希望它返回一些我可以用来确保它正确生成绘图的东西。我知道 matplotlib 内置了测试功能,但我必须重组很多代码才能使其正常工作。

【问题讨论】:

  • 不使用您已有的数据非常愚蠢,是的。如果你有xvaluesyvalues,那么使用它们。将这些数据放在其他地方,然后尝试从其他地方而不是您最初拥有的地方获取数据,这简直是愚蠢的。
  • 您肯定错过了解释您的全部问题,否则您的问题没有意义(正如@Wayne 所说:只需返回您的原始数据)。你没有告诉我们什么?我怀疑是 XY 问题:您正在尝试解决另一个问题,而您正在尝试做的这个问题是为了解决派生问题。如果您说出您真正想要的是什么,我们可以帮助您正确地做到这一点。
  • 从您的编辑来看,我认为您违反了测试原则之一,即将您的被测系统 (SUT) 与外部依赖项隔离开来。您需要测试您的代码,而不是它与外部库的交互,更不用说外部库本身了。

标签: python matplotlib


【解决方案1】:

我认为以下代码可以满足您对简单线图的要求:

import numpy as np
import matplotlib.pyplot as plt

def foo(xaxis, yaxis): 
    fig, ax = plt. subplots(figsize=(20, 10), dpi=100)
    curve = ax.plot(xaxis, yaxis)
    # curve = [Line2D object]
    return curve[0].get_xdata(), curve[0].get_ydata()

x,y = foo(range(10), range(0,20,2))
print(x,y)

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2013-06-18
    • 2019-07-29
    相关资源
    最近更新 更多