【问题标题】:How to plot the difference between data and a function in matplotlib如何在 matplotlib 中绘制数据和函数之间的差异
【发布时间】:2017-05-20 15:27:59
【问题描述】:

我在一个名为 values.txt 的文件中有一个 x,y 值的数据集,如下所示:

1  32432.4323
2  23432.1143
.
.
.
999 1111.23432

我还有一个函数 f(x), 2*x^2+1

我想绘制函数和 y 值之间的差异曲线。像这样的:

1  32432.4323 - f(1)
2  23432.1143 - f(2)
.
.
.
999 1111.23432 - f(999)

我可以通过计算差异并将其放入单独的文件 values_diff.txt 并将其加载到 matplotlib 中来做到这一点,但我想知道在 matplotlib 中是否有一种更惯用的方式来执行此操作,不需要显式使用第二个文件,

【问题讨论】:

  • 无需另存为txt文件。您可以根据 x 值绘制获得的差异值。意思是,你想保存的数据可以用mpl绘制。
  • Matplotlib 不是为了那个(它只是为了绘图)。当然你需要看numpy
  • @StijnVanDaele 可以提供一个简单的例子吗?
  • @lbellomo 你可以在 matplotlib 中绘制函数,也可以绘制数据,我希望你可以简单地做到这两点,而不必求助于其他方法。
  • 我的回答是一个例子,说明当您不要求问题作者说明他们自己尝试过什么时,很容易浪费精力。

标签: python matplotlib


【解决方案1】:

我并不反对编写代码。:)

为 x 值创建一个向量,为 y 值创建一个向量,然后为 y 值与函数值之间的差异创建一个向量。在这段代码中,我为缺失的 y 值提供了虚拟值。然后简单地首先绘制 y 值与 x 值,然后绘制差值与 x 值。

import matplotlib.pyplot as plt

f = lambda x: 2*x**2 +1

x = list(range(1,1000))
y = [32432.4323, 23432.1143] +[23432.1132-10*k for k in range(1,997)]+ [1111.23432]

diffs=[]
for an_x, a_y in zip(x,y):
    diffs.append(a_y-f(an_x))

plt.plot(x, y, 'r-')
plt.plot(x, diffs, 'b-')

plt.show()

【讨论】:

  • 感谢这个例子,这就是我现在正在做的事情,我希望有一种方法可以做到这一点,而不需要在 matplotlib 外部进行差异,而是使用是表情界面。
【解决方案2】:

我不会为你写代码,但这会对你有所帮助

首先将您的 txt 文件放入 pandas: Load data from txt with pandas

接下来您使用 apply 函数进行减法: How to apply a function to two columns of Pandas dataframe

最后你绘制它们: How to plot two columns of a pandas data frame using points?

亲切的问候, 斯蒂金

【讨论】:

  • 使用apply 可能是不必要的,老实说pandas 真的是矫枉过正。只需numpy 甚至香草 python 都应该足够轻松。
  • 我目前正在使用这样的解决方案,我习惯使用术语“第二个文件”作为查询不需要第二种存储形式的解决方案的方法。哦,好吧,我想这是不可能的 - 感谢您的尝试。
  • 不,您实际上是指“values_diff.txt”。但是不行,mpl不能帮你做减法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2020-06-15
  • 2021-09-17
相关资源
最近更新 更多