我有一个数据集,对于theta和phi的离散值,我有一些值。我想在一个球体上表示它,以便在球体上由极角theta和方位角phi给出的点上,颜色显示该特定值。

如何在python中完成?

最佳答案

我认为您需要的是spherical harmonics example

python - 球体上的颜色以描述值-LMLPHP


最小示例:

from mayavi import mlab
import numpy as np

# Make sphere, choose colors
phi, theta = np.mgrid[0:np.pi:101j, 0:2*np.pi:101j]
x, y, z = np.sin(phi) * np.cos(theta), np.sin(phi) * np.sin(theta), np.cos(phi)
s = x*y  # <-- colors

# Display
mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0, 0, 0), size=(600, 500))
mlab.mesh(x, y, z, scalars=s, colormap='Spectral')
mlab.view()
mlab.show()

您将需要python2,而不是python3。请参阅2015年的thread
在Ubuntu 14.04中,我说:

sudo apt-get install python-vtk python-scipy python-numpy
sudo pip install mayavi
python main.py  # After saving the code below as main.py

这是完整的代码:

# Author: Gael Varoquaux <[email protected]>
# Copyright (c) 2008, Enthought, Inc.
# License: BSD Style.

from mayavi import mlab
import numpy as np
from scipy.special import sph_harm

# Create a sphere
r = 0.3
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0:pi:101j, 0:2 * pi:101j]

x = r * sin(phi) * cos(theta)
y = r * sin(phi) * sin(theta)
z = r * cos(phi)

mlab.figure(1, bgcolor=(1, 1, 1), fgcolor=(0, 0, 0), size=(400, 300))
mlab.clf()
# Represent spherical harmonics on the surface of the sphere
for n in range(1, 6):
    for m in range(n):
        s = sph_harm(m, n, theta, phi).real

        mlab.mesh(x - m, y - n, z, scalars=s, colormap='jet')

        s[s < 0] *= 0.97

        s /= s.max()
        mlab.mesh(s * x - m, s * y - n, s * z + 1.3,
                  scalars=s, colormap='Spectral')

mlab.view(90, 70, 6.2, (-1.3, -2.9, 0.25))
mlab.show()

如果计算机速度较慢,则本示例的加载时间约为20秒。
您可以使用鼠标旋转和缩放图像。

关于python - 球体上的颜色以描述值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23517416/

10-14 00:07