使用Matplotlib/Python创建极坐标图堆叠
我需要生成一堆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个类似的2D极坐标图,我想把它们整齐地叠在一起。如果有更好的方法来在3D中可视化一个扭曲的圆柱体,我非常乐意听取建议。任何帮助都非常感谢!
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()
如果你调整ax.plot
的最后一个参数,它会控制每一片的高度。例如,如果你想把所有数据投影到一个单一的轴上,你可以使用ax.plot(X, Y, 0)
。如果想要一个更特别的例子,你可以把数据的高度映射到一个函数上,比如一个鞍形ax.plot(X, Y, -X**2+Y**2 )
。通过调整颜色,你理论上可以表示多个四维数据集(不过我不确定这样是否会很清晰)。下面是一些例子: