gpt4 book ai didi

python-2.7 - 使用matplotlib中的一组标量值为球体表面着色

转载 作者:行者123 更新时间:2023-12-03 16:45:00 25 4
gpt4 key购买 nike

我对matplotlib相当陌生(这也是我在这里的第一个问题)。我试图代表由EEG记录的头皮表面电位。到目前为止,我有一个球形投影的二维图形,该图形是使用contourf生成的,几乎可以归结为一个普通的热图。

有什么办法可以在半个球体上完成?,即生成具有由值列表指定的表面颜色的3D球体?像http://embal.gforge.inria.fr/img/inverse.jpg这样的东西,但仅用半个球体,我就绰绰有余了。

我已经看到了一些相关的问题(例如Matplotlib 3d colour plot - is it possible?),但是它们要么没有真正解决我的问题,要么至今仍未得到解答。

我也花了整个上午的时间浏览无数的示例。在我发现的大多数内容中,表面某个特定点的颜色指示其Z值,但我不希望...我想绘制表面,然后使用数据I指定颜色有。

最佳答案

您可以使用plot_trisurf并通过set_array方法将自定义字段分配给基础ScalarMappable

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.tri as mtri

(n, m) = (250, 250)

# Meshing a unit sphere according to n, m
theta = np.linspace(0, 2 * np.pi, num=n, endpoint=False)
phi = np.linspace(np.pi * (-0.5 + 1./(m+1)), np.pi*0.5, num=m, endpoint=False)
theta, phi = np.meshgrid(theta, phi)
theta, phi = theta.ravel(), phi.ravel()
theta = np.append(theta, [0.]) # Adding the north pole...
phi = np.append(phi, [np.pi*0.5])
mesh_x, mesh_y = ((np.pi*0.5 - phi)*np.cos(theta), (np.pi*0.5 - phi)*np.sin(theta))
triangles = mtri.Triangulation(mesh_x, mesh_y).triangles
x, y, z = np.cos(phi)*np.cos(theta), np.cos(phi)*np.sin(theta), np.sin(phi)

# Defining a custom color scalar field
vals = np.sin(6*phi) * np.sin(3*theta)
colors = np.mean(vals[triangles], axis=1)

# Plotting
fig = plt.figure()
ax = fig.gca(projection='3d')
cmap = plt.get_cmap('Blues')
triang = mtri.Triangulation(x, y, triangles)
collec = ax.plot_trisurf(triang, z, cmap=cmap, shade=False, linewidth=0.)
collec.set_array(colors)
collec.autoscale()
plt.show()

关于python-2.7 - 使用matplotlib中的一组标量值为球体表面着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com