使用Matplotlib/Python创建极坐标图堆栈

4

我需要生成一组2D极坐标图(一个3D圆柱形图),以便我可以查看畸变的圆柱体。我想使用matplotlib,因为我已经安装了它,并希望将我的代码分发给其他人,他们只有matplotlib。例如,假设我有一堆2D数组。是否有任何方法可以在不下载外部包的情况下完成此操作?下面是我的代码:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

A0 = 55.0
offset = 60.0

R = [116.225,115.105,114.697,115.008,115.908,117.184,118.61,119.998,121.224,122.216,\
122.93,123.323,123.343,122.948,122.134,120.963,119.575,118.165,116.941,116.074,115.66\
,115.706,116.154,116.913,117.894,119.029,120.261,121.518,122.684,123.594,124.059,\
123.917,123.096,121.661,119.821,117.894,116.225]

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8],polar=True)     # Polar plot
ax.plot(theta,R,lw=2.5)
ax.set_rmax(1.5*(A0)+offset)
plt.show()

我有另外10个类似的二维极坐标图,我想把它们整齐地堆叠起来。如果有更好的方法来可视化扭曲的圆柱体在三维空间中,欢迎提出建议。非常感谢您的帮助!

1个回答

7

如果你想使用matplotlib叠加极地图,一种方法是使用Axes3D模块。你会注意到我先使用了极坐标,然后在准备绘制时将它们转换回笛卡尔坐标。

from numpy import *
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

n = 1000

fig = plt.figure()
ax = fig.gca(projection='3d')

for k in linspace(0, 5, 5):
    THETA = linspace(0, 2*pi, n)
    R     = ones(THETA.shape)*cos(THETA*k)

    # Convert to Cartesian coordinates
    X = R*cos(THETA)
    Y = R*sin(THETA)

    ax.plot(X, Y, k-2)

plt.show()

enter image description here

如果你玩转ax.plot的最后一个参数,它控制每个切片的高度。例如,如果你想将所有数据投影到单个轴上,可以使用ax.plot(X, Y, 0)。对于更奇特的例子,你可以将数据的高度映射到一个函数上,比如一个鞍形曲线ax.plot(X, Y, -X**2+Y**2 )。通过调整颜色,理论上你可以表示多个四维数据集(但我不确定这样做是否清晰)。以下是示例:

enter image description here


非常感谢!我猜我根本没有进行极坐标到笛卡尔坐标的转换。图形堆栈看起来很棒。 - prrao
一个快速的问题。我可以将一个表面渲染到堆叠的图中吗?这样看起来会更好。 - prrao
@prrao 是的,开始查找的好地方是 contour3D(参见 http://www.scipy.org/Cookbook/Matplotlib/mplot3D)。如果您需要帮助处理等高线图,提出一个新问题可能更有意义。 - Hooked

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接