matplotlib 填充3维闭合图像

问题描述

使用matplotlib绘制了3维图像曲线,但是不知道如何将其闭合空间填充颜色,尝试了二维中的fill方法,但是会提示在3d模块中无法使用?

相关代码

def draw3d(yy, zz, y_f, z_f, y_l, z_l):
    figure = plt.figure()
    ax_3d = figure.gca(projection='3d')

    
    yy[-1].reverse()
    zz[-1].reverse()
    y_l.reverse()
    z_l.reverse()

    #y和z的点集,draw_y和draw_z都是167个float64的数值元素的数组
    draw_y = y_f + yy[-1] + y_l + yy[0]
    draw_z = z_f + zz[-1] + z_l + zz[0]

    #draw_x = np.array([[500]*167]*167)
    draw_z = np.array(draw_z)
    draw_y = np.array(draw_y)


    ax_3d.plot(draw_y, draw_z, zs=500, zdir='x') #3维未填充图像平面
    ax_3d.set(xlabel='x/mm', ylabel='y/mm', zlabel='z/mm')

    plt.show()

    figure.savefig("./x_500_3d.png")

你期待的结果是什么?实际看到的错误信息又是什么?

图片描述

如图,我希望曲线中间是被颜色填充的,由于y,z都是数值集合,并不是一个完整的曲线,只是用plot方法将这些点连接起来了,故不知道如何填充蓝色边缘内部的空间。

阅读 6.3k
2 个回答
新手上路,请多包涵

求大神解答,新人求助

3D图形好像没有填充方法,需要先转换成3D Polygon。下面是我根据SO上的一个回答写的一个测试,你自己体会一下吧。
注:这个方法来自SO,原帖地址:https://stackoverflow.com/que...,不明白的可以去原贴查看。

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

size = 40 
x = [[0] * size] * size
y = list(map(sorted, np.random.rand(size, size)))
z = list(map(sorted, np.random.rand(size, size)))
vect = []
for i in range(size):
    vect.append(list(zip(x[i], y[i], z[i])))
poly3dCollection = Poly3DCollection(vect)

fig = plt.figure()
ax = Axes3D(fig)
ax.add_collection3d(poly3dCollection)
ax.set_xlim([-1, 1])
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")

plt.show()

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题