【问题标题】:strange behavior of matplotlib plot on numpy matrix elementmatplotlib在numpy矩阵元素上的奇怪行为
【发布时间】:2019-09-19 09:41:30
【问题描述】:

我正在使用 python3.X

我在 matplotlib 中的一个 numpy 矩阵元素上遇到了一些非常奇怪的行为 作为示例,我想绘制一个简单的 sinc() 函数:

import numpy as np
import matplotlib.pyplot as plt

t=np.matrix(np.linspace(-10,10,1024))
x=np.sinc(t)

plt.plot(t,x,color='blue', linestyle='solid', linewidth=2)
plt.show()

上面这段代码生成:

plt.plot(...) 替换为:

plt.plot(t,x,'-ob')

生成:

我无法弄清楚这种行为的原因,希望得到一些帮助

【问题讨论】:

  • 在您的第一种情况下,plt.plot 将您的输入解释为 1024 个数据集并单独绘制每个数据集。替换为t.Tx.T(转置你的数组),它工作正常
  • 第二种情况也是如此,但由于您使用的是点而不是线,所以输出看起来还可以。
  • @Brenlla 你能把它发布为答案吗,让我接受,谢谢

标签: python-3.x numpy matplotlib


【解决方案1】:

根据docs,当使用二维数组时,plot 将列解释为单独的数据集。因此,在第一种情况下,您要绘制 1024 条线,每条线都有一个点。由于线图通过在 点之间绘制线来工作,因此不会显示任何内容:

t=np.matrix(np.linspace(-10,10,1024))
x=np.sinc(t)

plt.plot(t,x,color='blue', linestyle='solid', linewidth=2)
# plot shows nothing

将您的数组转换为单列,它工作正常:

plt.plot(t.T,x.T,color='blue', linestyle='solid', linewidth=2)
# plot shows line

第二种情况很好,因为在绘制点时,会为每个数据点绘制一个。不过,仅绘制一个数据集可能会更快:

plt.plot(t.T,x.T,'-ob')
# same output, probably faster

【讨论】:

  • 另一个问题,为什么当我将t 更改为np.array 时,它可以在没有转置的情况下工作;这两种类型的本质区别是什么?也将不胜感激
  • 建议您使用array 而不是matrix。矩阵总是二维的,而数组可以有任何维度。对于这种情况,如果您创建一维数组(检查t.ndim),则转置不会执行任何操作,因为只有一维。
  • 我检查了ndim,正如你所说,确实np.array 它只是1Dnp.matrix2D ;感谢您指出问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多