鍍金池/ 問答/數(shù)據(jù)分析&挖掘  Python/ matplotlib 填充3維閉合圖像

matplotlib 填充3維閉合圖像

問題描述

使用matplotlib繪制了3維圖像曲線,但是不知道如何將其閉合空間填充顏色,嘗試了二維中的fill方法,但是會(huì)提示在3d模塊中無法使用?

相關(guān)代碼

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的點(diǎn)集,draw_y和draw_z都是167個(gè)float64的數(shù)值元素的數(shù)組
    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")

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

圖片描述

如圖,我希望曲線中間是被顏色填充的,由于y,z都是數(shù)值集合,并不是一個(gè)完整的曲線,只是用plot方法將這些點(diǎn)連接起來了,故不知道如何填充藍(lán)色邊緣內(nèi)部的空間。

回答
編輯回答
慢半拍

3D圖形好像沒有填充方法,需要先轉(zhuǎn)換成3D Polygon。下面是我根據(jù)SO上的一個(gè)回答寫的一個(gè)測(cè)試,你自己體會(huì)一下吧。
注:這個(gè)方法來自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()

圖片描述

2017年12月2日 03:52
編輯回答
熟稔

求大神解答,新人求助

2017年1月4日 18:02