Python使用Matplotlib繪制3D圣誕樹(shù)
前言
因?yàn)槲覀儼咽フQ樹(shù)安裝在暖氣電池旁邊,所以它很快就死了。所以我決定用 Matplotlib 繪制一棵圣誕樹(shù)。你不需要為它遮陽(yáng)避暑,它也不需要任何水。在阿瑞克斯星球,水的供應(yīng)是有限的。地球上也是如此。
步驟
要在 matplotlib 中繪圖,我們需要將其包含在內(nèi)。
此外,我們還要為 3D 準(zhǔn)備所有庫(kù)。
import math import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection="3d")
讓我們先畫(huà)一個(gè) 3D 圓,確保一切正常。
fig = plt.figure() ax = fig.add_subplot(111, projection="3d") k=300 Z = [10 for i in range(k)] X = [math.cos(i/10) for i in range(k)] Y = [math.sin(i/10) for i in range(k)] ax.scatter(X,Y,Z, c="green", marker="^") plt.show()

不錯(cuò)!這是非常標(biāo)準(zhǔn)的。我們現(xiàn)在只修復(fù) Z 坐標(biāo)。
現(xiàn)在,應(yīng)用 Z 坐標(biāo)使其 3D 化。
Z = [i for i in range(k)]

讓我們?cè)陧敳靠s小圓的半徑。
Z = [i for i in range(k)] X = [math.cos(i/5)*(k-i) for i in range(k)] Y = [math.sin(i/5)*(k-i) for i in range(k)]

Matplotlib 總是傾向于貼合圖形,只需在此處添加這些限制即可:
plt.xlim(-500,500) plt.ylim(-500,500)

畫(huà)一些紅圈。它們的公式相同,但步長(zhǎng)更大。我們還通過(guò)在 sin 和 cos 參數(shù)上加 2 來(lái)移動(dòng)它,這樣它們就不會(huì)與樹(shù)本身相交。
k=300 Z = [i for i in range(k)] X = [math.cos(i/5)*(k-i) for i in range(k)] Y = [math.sin(i/5)*(k-i) for i in range(k)] ax.scatter(X,Y,Z, c="green", marker="^") k=300 step = 4 Z = [i for i in range(1,k,step)] X = [math.cos(i/5+2)*(k-i+10) for i in range(1,k,step)] Y = [math.sin(i/5+2)*(k-i+10) for i in range(1,k,step)] ax.scatter(X,Y,Z, c="red", marker="o") plt.xlim(-500,500) plt.ylim(-500,500) plt.show()

微調(diào)裝飾
c = [(i/k,abs(0.5-i/k),i/k) for i in range(1,k,step)] ax.scatter(X,Y,Z, c=c, marker="o",s=40)

要旋轉(zhuǎn)樹(shù)形圖,我們需要為每一幀繪制樹(shù)形圖,并在 sin 和 cos 參數(shù)中添加一些常數(shù)。
我們?yōu)槌跏紙D形和每一幀復(fù)制代碼。
import math
import matplotlib.pyplot as plt
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection="3d")
def init():
k=300
Z = [i for i in range(k)]
X = [math.cos(i/5)*(k-i) for i in range(k)]
Y = [math.sin(i/5)*(k-i) for i in range(k)]
ax.scatter(X,Y,Z, c="green", marker="^")
step = 3
c = [(i/k,abs(0.5-i/k),i/k) for i in range(1,k,step)]
Z = [i for i in range(1,k,step)]
X = [math.cos(i/5+2)*(k-i+10) for i in range(1,k,step)]
Y = [math.sin(i/5+2)*(k-i+10) for i in range(1,k,step)]
ax.scatter(X,Y,Z, c=c, marker="o",s=40)
plt.xlim(-500,500)
plt.ylim(-500,500)
return fig,
def animate(f):
fig.clear()
ax = fig.add_subplot(111, projection="3d")
k=300
Z = [i for i in range(k)]
X = [math.cos(i/5+f/10)*(k-i) for i in range(k)]
Y = [math.sin(i/5+f/10)*(k-i) for i in range(k)]
ax.scatter(X,Y,Z, c="green", marker="^")
step = 3
c = [(i/k,abs(0.5-i/k),i/k) for i in range(1,k,step)]
Z = [i for i in range(1,k,step)]
X = [math.cos(i/5+2+f/10)*(k-i+10) for i in range(1,k,step)]
Y = [math.sin(i/5+2+f/10)*(k-i+10) for i in range(1,k,step)]
ax.scatter(X,Y,Z, c=c, marker="o",s=40)
plt.xlim(-500,500)
plt.ylim(-500,500)
return fig,
ani=animation.FuncAnimation(fig, animate, init_func=init,
frames=90, interval=50, blit=True)
ani.save("christmas_tree.mp4")這就是結(jié)果:

到此這篇關(guān)于Python使用Matplotlib繪制3D圣誕樹(shù)的文章就介紹到這了,更多相關(guān)Python Matplotlib繪制3D圣誕樹(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用pyecharts繪制簡(jiǎn)單的折線圖
這篇文章講給大家介紹一下python使用pyecharts繪制簡(jiǎn)單的折線圖的黨法步驟,文中有詳細(xì)的代碼示例講解,對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-07-07
python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法
這篇文章主要介紹了python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解
本篇文章主要介紹了Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
四行Python3代碼實(shí)現(xiàn)圖片添加美顏效果
這篇文章主要為大家介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)給圖片添加美顏效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04
使用python 寫(xiě)一個(gè)靜態(tài)服務(wù)(實(shí)戰(zhàn))
今天小編就為大家分享一篇使用python 寫(xiě)一個(gè)靜態(tài)服務(wù)(實(shí)戰(zhàn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
pandas DataFrame 警告(SettingWithCopyWarning)的解決
這篇文章主要介紹了pandas DataFrame 警告(SettingWithCopyWarning)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python成功解決ZeroDivisionError:?division?by?zero的方法過(guò)程
在Python編程中,ZeroDivisionError:divisionbyzero是因?yàn)閲L試除以零所導(dǎo)致的常見(jiàn)錯(cuò)誤,這篇文章詳細(xì)介紹了錯(cuò)誤的原因、解決方案,需要的朋友可以參考下2024-09-09

