Matplotlib 中的极坐标图
我有一组数据,想要使用 Matplotlib 生成极坐标等值线图。
我的数据如下:
theta
- 角度值的一维数组radius
- 半径值的一维数组value
- 我想要的值的一维数组用于轮廓
这些都是正确对齐的一维数组 - 例如:
theta radius value
30 1 2.9
30 2 5.3
35 5 9.2
也就是说,所有值都重复足够多次,以便这个包含三个变量的“表”的每一行定义一个点。
如何根据这些值创建极坐标等值线图?我考虑过将半径和 theta 值转换为 x 和 y 值并在笛卡尔坐标中进行,但轮廓函数似乎需要 2D 数组,我不太明白为什么。
有什么想法吗?
I have a set of data that I want to use to produce a contour plot in polar co-ordinates using Matplotlib.
My data is the following:
theta
- 1D array of angle valuesradius
- 1D array of radius valuesvalue
- 1D array of values that I want to use for the contours
These are all 1D arrays that align properly - eg:
theta radius value
30 1 2.9
30 2 5.3
35 5 9.2
That is, all of the values are repeated enough times so that each row of this 'table' of three variables defines one point.
How can I create a polar contour plot from these values? I've thought about converting the radius and theta values to x and y values and doing it in cartesian co-ordinates, but the contour function seems to require 2D arrays, and I can't quite understand why.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Matplotlib 的
contour()
函数期望将数据排列为点的 2D 网格以及每个网格点的相应值网格。如果您的数据自然排列在网格中,您可以将 r、theta 转换为 x、y 并使用contour(r*np.cos(theta), r*np.sin(theta), value)来制作你的情节。如果您的数据不是自然网格化的,您应该遵循 Stephen 的建议并使用
griddata()
将数据插入到网格中。以下脚本显示了两者的示例。
Matplotlib's
contour()
function expects data to be arranged as a 2D grid of points and corresponding grid of values for each of those grid points. If your data is naturally arranged in a grid you can convert r, theta to x, y and usecontour(r*np.cos(theta), r*np.sin(theta), values)
to make your plot.If your data isn't naturally gridded, you should follow Stephen's advice and used
griddata()
to interpolate your data on to a grid.The following script shows examples of both.
我不知道是否可以直接绘制极坐标等值线图,但如果转换为笛卡尔坐标,则可以使用
griddata
函数将一维数组转换为二维数组。I don't know if it's possible to do a polar contour plot directly, but if you convert to cartesian coordinates you can use the
griddata
function to convert your 1D arrays to 2D.