繁体   English   中英

Matplotlib 中的极轮廓 plot

[英]Polar contour plot in Matplotlib

我有一组数据,我想使用 Matplotlib 在极坐标中生成轮廓 plot。

我的数据如下:

  • theta - 角度值的一维数组
  • radius - 半径值的一维数组
  • value - 我想用于轮廓的一维值数组

这些都是正确对齐的一维 arrays - 例如:

theta   radius   value
30      1        2.9
30      2        5.3
35      5        9.2

也就是说,所有值都重复了足够多的次数,以使这个包含三个变量的“表”的每一行都定义一个点。

如何从这些值创建极坐标 plot? 我考虑过将半径和 theta 值转换为 x 和 y 值并在笛卡尔坐标中进行,但轮廓 function 似乎需要 2D arrays,我不太明白为什么。

有任何想法吗?

Matplotlib 的contour() function 期望数据被排列为点的二维网格和每个网格点的对应值网格。 如果您的数据自然排列在网格中,您可以将 r, theta 转换为 x, y 并使用contour(r*np.cos(theta), r*np.sin(theta), values)来制作您的 plot。

如果您的数据不是自然网格化的,您应该遵循 Stephen 的建议并使用griddata()将数据插入到网格中。

以下脚本显示了两者的示例。

import pylab as plt
from matplotlib.mlab import griddata
import numpy as np

# data on a grid
r = np.linspace(0, 1, 100)
t = np.linspace(0, 2*np.pi, 100)
r, t = np.meshgrid(r, t)
z = (t-np.pi)**2 + 10*(r-0.5)**2

plt.subplot(121)
plt.contour(r*np.cos(t), r*np.sin(t), z)

# ungrid data, then re-grid it
r = r.flatten()
t = t.flatten()
x = r*np.cos(t)
y = r*np.sin(t)
z = z.flatten()
xgrid = np.linspace(x.min(), x.max(), 100)
ygrid = np.linspace(y.min(), y.max(), 100)
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata(x,y,z, xgrid, ygrid)

plt.subplot(122)
plt.contour(xgrid, ygrid, zgrid)

plt.show()

在此处输入图像描述

我不知道是否可以直接做极坐标 plot,但如果你转换为笛卡尔坐标,你可以使用griddata function 将你的一维 ZA3CBC3F9D0CE2F2C1554E1D671 转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM