python - 如何在 MatPlotLib (NumPy) 中绘制多维数据的轮廓?

标签 python numpy matplotlib plot contour

我对数组中的多个量进行了多次测量,如下所示:

m = array([[2, 1, 3, 2, 1, 4, 2], # measurements for quantity A
[8, 7, 6, 7, 5, 6, 8], # measurements for quantity B
[0, 1, 2, 0, 3, 2, 1], # measurements for quantity C
[5, 6, 7, 5, 6, 5, 7]] # measurements for quantity D
)

数量是相关的,我需要绘制各种等高线图。就像“B 与 D x A 的轮廓”一样。

确实,在一般情况下,函数可能没有很好地定义 - 例如,在上面的数据中,第 0 列和第 3 列显示,对于相同的 (D=5,A=2) 指出 B 有两个不同的值(B=8B=7)。但是,对于某些组合,我知道存在功能依赖性,我需要绘制出来。

MatPlotLib 中的 contour() 函数需要三个数组:X 和 Y 可以是一维数组,Z 必须是具有相应值的二维数组。我应该如何从 m 中准备/提取这些数组?

最佳答案

您可能想要使用类似 scipy.interpolate.griddata 的内容准备您的 Z 数组。给定输入 X 和 Y,以及最终绘图所需的一组排序的、规则间隔的 X 和 Y 数组,这会将您的数据插值到规则间隔的二维数组中。例如,如果 X 和 Y 包含 1 到 10 之间的数据点,那么您需要构造一组新的 X 和 Y,其步长大小对您的数据有意义,例如

Xout = numpy.linspace(1,10,10)
Yout = numpy.linspace(1,10,10)

要将 Xout 和 Yout 数组转换为 2D 数组,您可以使用 numpy.meshgrid ,例如

Xout_2d, Yout_2d = numpy.meshgrid(Xout,Yout)

然后您可以使用这些新的规则间隔数组来构造可用于绘图的插值 Z 数组,例如

Zout = scipy.interpolate.griddata((X,Y),Z,(Xout_2d,Yout_2d))

此插值 2D Zout 应可用于 Xout_2d 和 Yout_2d 的等高线图。

从 m 中提取数组很简单,只需执行以下操作:

A, B, C, D = (row for row in m)

关于python - 如何在 MatPlotLib (NumPy) 中绘制多维数据的轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21765036/

相关文章:

python - 检查 python azure 中是否存在 blob

python - Django 获取 Apache 用户

python - 如何使用每行的索引矩阵来索引矩阵的行元素?

python - matplotlib SpanSelector 小部件 : how to use inside a function?

python - 如何在图像 matplotlib 上绘制 pcolor?

python - Matplotlib 饼图 Mathtext 标签/Autopct

python - pyqt4 : AttributeError: 'QPlainTextEdit' object has no attribute 'text'

python - pandas read csv 在固定时间内使用定界符

python - 如何将 int 值存储在 numpy.empty 数组中?

python - 按 numpy 数组的对象字段对对象列表进行排序?