Python 在球体内创建球体

Python 在球体内创建球体,python,matplotlib,geometry,Python,Matplotlib,Geometry,有没有可能创建一个像这样的图形?我不需要注释,也不需要线条。。仅球体的层[已填充。] 用matplotlib 编辑 我很想这么做,但我认为matplotlib不能正确显示图层 这是从上面来的 这是直接的角度 任何帮助, 多谢各位 编辑2 我设法用matlab做到了这一点 figure() hold on r=2 Rs = [1,2,3,4] l=0.95 colors = ['g','r','b'] for i=1:length(Rs) l = l-0.015 r = Rs

有没有可能创建一个像这样的图形?我不需要注释,也不需要线条。。仅球体的层[已填充。]

用matplotlib

编辑

我很想这么做,但我认为matplotlib不能正确显示图层

这是从上面来的

这是直接的角度

任何帮助, 多谢各位

编辑2 我设法用matlab做到了这一点

figure()
hold on 
r=2
Rs = [1,2,3,4]
l=0.95
colors = ['g','r','b']

for i=1:length(Rs)
    l = l-0.015
    r = Rs(i)
    colr = colors(i)
    u = linspace(2*pi - l*2 * pi, l*2 * pi, 100);
    v = linspace(0,pi, 100);
    x = r * (cos(u)' * sin(v));
    y = r * (sin(u)' * sin(v));
    z = r * ones(length(u),1)* cos(v);
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
    hold on 


    x = [0*cos(u(end))'*sin(v); r* cos(u(end))'*sin(v)];
    y = [0*sin(u(end))'*sin(v); r*sin(u(end))'*sin(v)];
    z = [0*ones(length(u(end)),1)*cos(v);r*ones(length(u(end)),1)*cos(v)];
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')


    x = [0*cos(u(1))'*sin(v); r* cos(u(1))'*sin(v)];
    y = [0*sin(u(1))'*sin(v); r*sin(u(1))'*sin(v)];
    z = [0*ones(length(u(1)),1)*cos(v);r*ones(length(u(1)),1)*cos(v)];
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
end
axis equal

这是在python中实现的方法,但看起来不是很好

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




fig = plt.figure()



ax = fig.add_subplot(111, projection='3d')



r=2

u = np.linspace(0.2*np.pi, 0.8*2 * np.pi, 100)
v = np.linspace(0.2, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')


x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')

x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')







r=1

u = np.linspace(0.1*np.pi, 0.9*2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')


x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')

x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')

plt.draw()
plt.show()
这是如何在Matlab中实现的,效果很好


您应该将您的工作代码作为答案发布,这样就可以单独投票,这样这个问题就被标记为已回答。@Graham-done。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np




fig = plt.figure()



ax = fig.add_subplot(111, projection='3d')



r=2

u = np.linspace(0.2*np.pi, 0.8*2 * np.pi, 100)
v = np.linspace(0.2, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')


x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')

x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='g')







r=1

u = np.linspace(0.1*np.pi, 0.9*2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')


x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')

x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]]) 
ax.plot_surface(x, y, z, rstride =5,
    cstride = 5, color ='yellow')

plt.draw()
plt.show()
figure()
hold on 
r=2
Rs = [1,2,3,4]
l=0.95
colors = ['g','r','b']

for i=1:length(Rs)
    l = l-0.015
    r = Rs(i)
    colr = colors(i)
    u = linspace(2*pi - l*2 * pi, l*2 * pi, 100);
    v = linspace(0,pi, 100);
    x = r * (cos(u)' * sin(v));
    y = r * (sin(u)' * sin(v));
    z = r * ones(length(u),1)* cos(v);
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
    hold on 


    x = [0*cos(u(end))'*sin(v); r* cos(u(end))'*sin(v)];
    y = [0*sin(u(end))'*sin(v); r*sin(u(end))'*sin(v)];
    z = [0*ones(length(u(end)),1)*cos(v);r*ones(length(u(end)),1)*cos(v)];
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')


    x = [0*cos(u(1))'*sin(v); r* cos(u(1))'*sin(v)];
    y = [0*sin(u(1))'*sin(v); r*sin(u(1))'*sin(v)];
    z = [0*ones(length(u(1)),1)*cos(v);r*ones(length(u(1)),1)*cos(v)];
    surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
end
axis equal