【问题标题】:Plot a smooth curve for an array and a normal one for another - Python为一个数组绘制一条平滑曲线,为另一个绘制一条普通曲线 - Python
【发布时间】:2015-03-27 04:37:43
【问题描述】:

我有以下要绘制的图形,两个形状数组 (120,) 和 (120,)。对于第二个数组,我试图获得一个平滑的情节,但无法做到。 下面绘制了一个正常的图:

 add_z = array([ 22.39409055, 20.91765398, 19.80805759, 19.14836638, 23.54310977, 19.68638808, 21.25143616, 21.32550146, 18.80392599, 17.37016759, 19.21143494, 18.27464661, 21.25150385, 20.61853909 ]) 

 dataNew = array([[ 26.69], [ 24.94], [ 22.37], [ 23.5 ], [ 22.69], [ 22.62], [ 18.5 ], [ 20.87], [ 19. ], [ 19.75], [ 20.72], [ 19.78], [ 20.38], [ 22.06]])

 import matplotlib.pyplot as plt
 plt.figure(figsize = (10,5))
 plt.plot(dataNew[:],'g')
 plt.plot(add_z[:],'b');

我尝试使用scipy's 插值方法,但是我真的不熟悉样条曲线。我试图将dataNew 作为正常绘图,将add_z 作为平滑曲线在同一个绘图窗口中进行。两者都是numpy 数组。

【问题讨论】:

  • dataNewadd_z 的示例会很有用。
  • @Marcin: add_z = array([ 22.39409055, 20.91765398, 19.80805759, 19.14836638, 23.54310977, 19.68638808, 21.25143616, 21.32550146............18.80392599, 17.37016759, 19.21143494, 18.27464661, 21.25150385, 20.61853909, 22.89028155, 22.3965408 ])dataNew = array([[ 26.69], [ 24.94], [ 22.37], [ 23.5 ], [ 22.69], [ 22.62]....[ 18.5 ], [ 20.87], [ 19. ], [ 19.75], [ 20.72], [ 19.78], [ 20.38], [ 22.06]]) 。谢谢
  • 这些数组中的省略号意味着这仍然不能复制粘贴运行;请在帖子 theseeker1 中编辑它们(可能是截断的版本)。
  • @cphlewis :做同样的事情。
  • 我不确定您所说的“平滑”是什么意思?你的意思是你真的想对数据运行一个平滑内核,或者你的意思是你想以某种方式对其进行插值?如果是后者,您没有指定足够的信息……您想要插入哪个新网格?

标签: python python-3.x matplotlib plot


【解决方案1】:

这只是修补另一个我尴尬地放错位置的stackoverflow答案:

import matplotlib.pyplot as plt
import numpy as np

add_z = np.array([ 22.39409055, 20.91765398, 19.80805759, 19.14836638, 23.54310977, 19.68638808, 21.25143616, 21.32550146, 18.80392599, 17.37016759, 19.21143494, 18.27464661, 21.25150385, 20.61853909, 22.89028155, 22.3965408 ])

dataNew = np.array([[ 26.69], [ 24.94], [ 22.37], [ 23.5 ], [ 22.69], [ 22.62], [ 18.5 ], [ 20.87], [ 19. ], [ 19.75], [ 20.72], [ 19.78], [ 20.38], [ 22.06]])

plt.figure(figsize = (10,5))
plt.plot(dataNew[:],'g')
plt.plot(add_z[:],'b');

from scipy import interpolate
f = interpolate.interp1d(np.arange(len(add_z)), add_z, kind='cubic')
xnew = np.arange(0, len(add_z)-1, 0.1)
ynew = f(xnew)
plt.plot(xnew, ynew, 'b:')

【讨论】:

  • 您好,感谢您的回复。我试过了,但只有 add_z 被显示。如前所述,它们是 (120,) 数组。
  • 评论不清楚。请注意,在此代码中,只有 add_z 被传递给 interpolate,如果您想要插入另一个数组,您可以编辑代码。此外,您可以比较此代码中数组的形状和原始数组的形状,并根据需要进行转置或整形。
  • 嘿,@thes,这是怎么回事?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多