我正在尝试生成球体图,其中一些点绘制在球体表面上。 (具体来说,这些点是 Lebedev 正交点)我希望我的图看起来与我在网上找到的这个类似:
我继续绘制球面,然后用散点图覆盖它。然而,这导致我的大部分点被下面的球体“吸收”,使得它们很难看到。看看:
如何防止我的点被球体遮挡?这是我用来生成该图的脚本:
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# Create a sphere
r = 1
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0.0:pi:100j, 0.0:2.0*pi:100j]
x = r*sin(phi)*cos(theta)
y = r*sin(phi)*sin(theta)
z = r*cos(phi)
#Import data
data = np.genfromtxt('leb.txt')
xx, yy, zz = np.hsplit(data, 3)
#Set colours and render
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(
x, y, z, rstride=1, cstride=1, color='c', alpha=0.6, linewidth=0)
ax.scatter(xx,yy,zz,color="k",s=20)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect("equal")
plt.tight_layout()
#plt.show()
我找到了一种使用 Python 的 mayavi 来做到这一点的方法。这是我得到的:
这是我使用的代码:
from mayavi import mlab
import numpy as np
# Create a sphere
r = 1.0
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()
data = np.genfromtxt('leb.txt')
xx, yy, zz = np.hsplit(data, 3)
mlab.mesh(x , y , z, color=(0.0,0.5,0.5))
mlab.points3d(xx, yy, zz, scale_factor=0.05)
mlab.show()
如果您认为这些点显示得不够好,您可以降低球体的 Alpha。但是,我认为您可能错误地将数据处理为 x、y、z 坐标。我从这里得到了一个点列表:http://people.sc.fsu.edu/~jburkardt/m_src/sphere_lebedev_rule_display/sphere_lebedev_rule_display.html,我的球体的点看起来有点像你的,直到我意识到文件包含 theta 和 phi 的值,我需要将度数转换为弧度。
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# Create a sphere
r = 1
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0.0:pi:100j, 0.0:2.0*pi:100j]
x = r*sin(phi)*cos(theta)
y = r*sin(phi)*sin(theta)
z = r*cos(phi)
#Import data
data = np.genfromtxt('leb.txt')
theta, phi, r = np.hsplit(data, 3)
theta = theta * pi / 180.0
phi = phi * pi / 180.0
xx = sin(phi)*cos(theta)
yy = sin(phi)*sin(theta)
zz = cos(phi)
#Set colours and render
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(
x, y, z, rstride=1, cstride=1, color='c', alpha=0.3, linewidth=0)
ax.scatter(xx,yy,zz,color="k",s=20)
ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect("equal")
plt.tight_layout()
plt.show()
0.000000000000000 90.000000000000000 -0.055226399197273
180.000000000000000 90.000000000000000 -0.055226399197273
90.000000000000000 90.000000000000000 -0.055226399197273
-90.000000000000000 90.000000000000000 -0.055226399197273
90.000000000000000 0.000000000000000 -0.055226399197273
90.000000000000000 180.000000000000000 -0.055226399197273
45.000000000000000 54.735610317245346 0.004450274607445
45.000000000000000 125.264389682754654 0.004450274607445
-45.000000000000000 54.735610317245346 0.004450274607445
-45.000000000000000 125.264389682754654 0.004450274607445
135.000000000000000 54.735610317245346 0.004450274607445
135.000000000000000 125.264389682754654 0.004450274607445
-135.000000000000000 54.735610317245346 0.004450274607445
-135.000000000000000 125.264389682754654 0.004450274607445
45.000000000000000 39.440090784780402 0.004496841067921
45.000000000000000 140.559909215219591 0.004496841067921
-45.000000000000000 39.440090784780402 0.004496841067921
-45.000000000000000 140.559909215219591 0.004496841067921
135.000000000000000 39.440090784780402 0.004496841067921
135.000000000000000 140.559909215219591 0.004496841067921
-135.000000000000000 39.440090784780402 0.004496841067921
-135.000000000000000 140.559909215219591 0.004496841067921
59.815442273124063 63.307345060625650 0.004496841067921
-59.815442273124063 63.307345060625650 0.004496841067921
59.815442273124063 116.692654939374364 0.004496841067921
-59.815442273124063 116.692654939374364 0.004496841067921
120.184557726875937 63.307345060625650 0.004496841067921
-120.184557726875937 63.307345060625650 0.004496841067921
120.184557726875937 116.692654939374364 0.004496841067921
-120.184557726875937 116.692654939374364 0.004496841067921
30.184557726875941 63.307345060625650 0.004496841067921
149.815442273124063 63.307345060625650 0.004496841067921
30.184557726875941 116.692654939374364 0.004496841067921
149.815442273124063 116.692654939374364 0.004496841067921
-30.184557726875941 63.307345060625650 0.004496841067921
-149.815442273124063 63.307345060625650 0.004496841067921
-30.184557726875941 116.692654939374364 0.004496841067921
-149.815442273124063 116.692654939374364 0.004496841067921
45.000000000000000 20.881794557261646 0.005049153450479
45.000000000000000 159.118205442738343 0.005049153450479
-45.000000000000000 20.881794557261646 0.005049153450479
-45.000000000000000 159.118205442738343 0.005049153450479
135.000000000000000 20.881794557261646 0.005049153450479
135.000000000000000 159.118205442738343 0.005049153450479
-135.000000000000000 20.881794557261646 0.005049153450479
-135.000000000000000 159.118205442738343 0.005049153450479
74.903220296612005 75.401622829462283 0.005049153450479
-74.903220296612005 75.401622829462283 0.005049153450479
74.903220296612005 104.598377170537717 0.005049153450479
-74.903220296612005 104.598377170537717 0.005049153450479
105.096779703387995 75.401622829462283 0.005049153450479
-105.096779703387995 75.401622829462283 0.005049153450479
105.096779703387995 104.598377170537717 0.005049153450479
-105.096779703387995 104.598377170537717 0.005049153450479
15.096779703387996 75.401622829462283 0.005049153450479
164.903220296612034 75.401622829462283 0.005049153450479
15.096779703387996 104.598377170537717 0.005049153450479
164.903220296612034 104.598377170537717 0.005049153450479
-15.096779703387996 75.401622829462283 0.005049153450479
-164.903220296612034 75.401622829462283 0.005049153450479
-15.096779703387996 104.598377170537717 0.005049153450479
-164.903220296612034 104.598377170537717 0.005049153450479
45.000000000000000 80.891636123006165 0.003976408018052
45.000000000000000 99.108363876993835 0.003976408018052
-45.000000000000000 80.891636123006165 0.003976408018052
-45.000000000000000 99.108363876993835 0.003976408018052
135.000000000000000 80.891636123006165 0.003976408018052
135.000000000000000 99.108363876993835 0.003976408018052
-135.000000000000000 80.891636123006165 0.003976408018052
-135.000000000000000 99.108363876993835 0.003976408018052
12.774805990014807 45.717979481517574 0.003976408018052
-12.774805990014807 45.717979481517574 0.003976408018052
12.774805990014807 134.282020518482426 0.003976408018052
-12.774805990014807 134.282020518482426 0.003976408018052
167.225194009985188 45.717979481517574 0.003976408018052
-167.225194009985188 45.717979481517574 0.003976408018052
167.225194009985188 134.282020518482426 0.003976408018052
-167.225194009985188 134.282020518482426 0.003976408018052
77.225194009985188 45.717979481517574 0.003976408018052
102.774805990014812 45.717979481517574 0.003976408018052
77.225194009985188 134.282020518482426 0.003976408018052
102.774805990014812 134.282020518482426 0.003976408018052
-77.225194009985188 45.717979481517574 0.003976408018052
-102.774805990014812 45.717979481517574 0.003976408018052
-77.225194009985188 134.282020518482426 0.003976408018052
-102.774805990014812 134.282020518482426 0.003976408018052
45.000000000000000 68.685581154790029 0.004401400650381
45.000000000000000 111.314418845209985 0.004401400650381
-45.000000000000000 68.685581154790029 0.004401400650381
-45.000000000000000 111.314418845209985 0.004401400650381
135.000000000000000 68.685581154790029 0.004401400650381
135.000000000000000 111.314418845209985 0.004401400650381
-135.000000000000000 68.685581154790029 0.004401400650381
-135.000000000000000 111.314418845209985 0.004401400650381
28.889424740291254 48.796111385350962 0.004401400650381
-28.889424740291254 48.796111385350962 0.004401400650381
28.889424740291254 131.203888614649060 0.004401400650381
-28.889424740291254 131.203888614649060 0.004401400650381
151.110575259708753 48.796111385350962 0.004401400650381
-151.110575259708753 48.796111385350962 0.004401400650381
151.110575259708753 131.203888614649060 0.004401400650381
-151.110575259708753 131.203888614649060 0.004401400650381
61.110575259708753 48.796111385350962 0.004401400650381
118.889424740291247 48.796111385350962 0.004401400650381
61.110575259708753 131.203888614649060 0.004401400650381
118.889424740291247 131.203888614649060 0.004401400650381
-61.110575259708753 48.796111385350962 0.004401400650381
-118.889424740291247 48.796111385350962 0.004401400650381
-61.110575259708753 131.203888614649060 0.004401400650381
-118.889424740291247 131.203888614649060 0.004401400650381
45.000000000000000 3.274152069216487 0.017245443505444
45.000000000000000 176.725847930783516 0.017245443505444
-45.000000000000000 3.274152069216487 0.017245443505444
-45.000000000000000 176.725847930783516 0.017245443505444
135.000000000000000 3.274152069216487 0.017245443505444
135.000000000000000 176.725847930783516 0.017245443505444
-135.000000000000000 3.274152069216487 0.017245443505444
-135.000000000000000 176.725847930783516 0.017245443505444
87.683564415961172 87.685455250362111 0.017245443505444
-87.683564415961172 87.685455250362111 0.017245443505444
87.683564415961172 92.314544749637903 0.017245443505444
-87.683564415961172 92.314544749637903 0.017245443505444
92.316435584038842 87.685455250362111 0.017245443505444
-92.316435584038842 87.685455250362111 0.017245443505444
92.316435584038842 92.314544749637903 0.017245443505444
-92.316435584038842 92.314544749637903 0.017245443505444
2.316435584038771 87.685455250362111 0.017245443505444
177.683564415961257 87.685455250362111 0.017245443505444
2.316435584038771 92.314544749637903 0.017245443505444
177.683564415961257 92.314544749637903 0.017245443505444
-2.316435584038771 87.685455250362111 0.017245443505444
-177.683564415961257 87.685455250362111 0.017245443505444
-2.316435584038771 92.314544749637903 0.017245443505444
-177.683564415961257 92.314544749637903 0.017245443505444
54.381587934584054 90.000000000000000 0.004231083095357
-54.381587934584054 90.000000000000000 0.004231083095357
125.618412065415953 90.000000000000000 0.004231083095357
-125.618412065415953 90.000000000000000 0.004231083095357
35.618412065415953 90.000000000000000 0.004231083095357
-35.618412065415953 90.000000000000000 0.004231083095357
144.381587934584047 90.000000000000000 0.004231083095357
-144.381587934584047 90.000000000000000 0.004231083095357
0.000000000000000 35.618412065415953 0.004231083095357
0.000000000000000 144.381587934584047 0.004231083095357
180.000000000000000 35.618412065415953 0.004231083095357
180.000000000000000 144.381587934584047 0.004231083095357
0.000000000000000 54.381587934584054 0.004231083095357
0.000000000000000 125.618412065415953 0.004231083095357
180.000000000000000 54.381587934584054 0.004231083095357
180.000000000000000 125.618412065415953 0.004231083095357
90.000000000000000 35.618412065415953 0.004231083095357
90.000000000000000 144.381587934584047 0.004231083095357
-90.000000000000000 35.618412065415953 0.004231083095357
-90.000000000000000 144.381587934584047 0.004231083095357
90.000000000000000 54.381587934584054 0.004231083095357
90.000000000000000 125.618412065415953 0.004231083095357
-90.000000000000000 54.381587934584054 0.004231083095357
-90.000000000000000 125.618412065415953 0.004231083095357
69.231820019013028 90.000000000000000 0.005198069864064
-69.231820019013028 90.000000000000000 0.005198069864064
110.768179980986986 90.000000000000000 0.005198069864064
-110.768179980986986 90.000000000000000 0.005198069864064
20.768179980986979 90.000000000000000 0.005198069864064
-20.768179980986979 90.000000000000000 0.005198069864064
159.231820019013014 90.000000000000000 0.005198069864064
-159.231820019013014 90.000000000000000 0.005198069864064
0.000000000000000 20.768179980986979 0.005198069864064
0.000000000000000 159.231820019013014 0.005198069864064
180.000000000000000 20.768179980986979 0.005198069864064
180.000000000000000 159.231820019013014 0.005198069864064
0.000000000000000 69.231820019013028 0.005198069864064
0.000000000000000 110.768179980986986 0.005198069864064
180.000000000000000 69.231820019013028 0.005198069864064
180.000000000000000 110.768179980986986 0.005198069864064
90.000000000000000 20.768179980986979 0.005198069864064
90.000000000000000 159.231820019013014 0.005198069864064
-90.000000000000000 20.768179980986979 0.005198069864064
-90.000000000000000 159.231820019013014 0.005198069864064
90.000000000000000 69.231820019013028 0.005198069864064
90.000000000000000 110.768179980986986 0.005198069864064
-90.000000000000000 69.231820019013028 0.005198069864064
-90.000000000000000 110.768179980986986 0.005198069864064
64.963704081332708 32.473856655655446 0.004695720972569
64.963704081332708 147.526143344344547 0.004695720972569
-64.963704081332708 32.473856655655446 0.004695720972569
-64.963704081332708 147.526143344344547 0.004695720972569
115.036295918667292 32.473856655655446 0.004695720972569
115.036295918667292 147.526143344344547 0.004695720972569
-115.036295918667292 32.473856655655446 0.004695720972569
-115.036295918667292 147.526143344344547 0.004695720972569
74.926112157973748 60.891424466952714 0.004695720972569
74.926112157973748 119.108575533047286 0.004695720972569
-74.926112157973748 60.891424466952714 0.004695720972569
-74.926112157973748 119.108575533047286 0.004695720972569
105.073887842026252 60.891424466952714 0.004695720972569
105.073887842026252 119.108575533047286 0.004695720972569
-105.073887842026252 60.891424466952714 0.004695720972569
-105.073887842026252 119.108575533047286 0.004695720972569
25.036295918667289 32.473856655655446 0.004695720972569
25.036295918667289 147.526143344344547 0.004695720972569
-25.036295918667289 32.473856655655446 0.004695720972569
-25.036295918667289 147.526143344344547 0.004695720972569
154.963704081332708 32.473856655655446 0.004695720972569
154.963704081332708 147.526143344344547 0.004695720972569
-154.963704081332708 32.473856655655446 0.004695720972569
-154.963704081332708 147.526143344344547 0.004695720972569
60.030959593932515 76.866650451671518 0.004695720972569
60.030959593932515 103.133349548328482 0.004695720972569
-60.030959593932515 76.866650451671518 0.004695720972569
-60.030959593932515 103.133349548328482 0.004695720972569
119.969040406067492 76.866650451671518 0.004695720972569
119.969040406067492 103.133349548328482 0.004695720972569
-119.969040406067492 76.866650451671518 0.004695720972569
-119.969040406067492 103.133349548328482 0.004695720972569
15.073887842026251 60.891424466952714 0.004695720972569
15.073887842026251 119.108575533047286 0.004695720972569
-15.073887842026251 60.891424466952714 0.004695720972569
-15.073887842026251 119.108575533047286 0.004695720972569
164.926112157973762 60.891424466952714 0.004695720972569
164.926112157973762 119.108575533047286 0.004695720972569
-164.926112157973762 60.891424466952714 0.004695720972569
-164.926112157973762 119.108575533047286 0.004695720972569
29.969040406067499 76.866650451671518 0.004695720972569
29.969040406067499 103.133349548328482 0.004695720972569
-29.969040406067499 76.866650451671518 0.004695720972569
-29.969040406067499 103.133349548328482 0.004695720972569
150.030959593932522 76.866650451671518 0.004695720972569
150.030959593932522 103.133349548328482 0.004695720972569
-150.030959593932522 76.866650451671518 0.004695720972569
-150.030959593932522 103.133349548328482 0.004695720972569
尝试使用 zorder 参数。在下面给出的示例中,3D 线图将显示在 3D trisurf 图的顶部。 zorder 从 0 到 10 而不是 0 到 1 的原因在here给出。
plt_axes.plot_trisurf(x, y, z, shade=False, color='blue', cmap='Blues', zorder=0)
plt_axes.plot(x, y, z, marker='.', linestyle='None', label='Label', color='red', zorder=10)
基本上我使用了与您相同的代码,并将散点图的半径更改为1.05。那么它看起来很适合我。