Python使用Matplotlib繪制3D圣誕樹
前言
因?yàn)槲覀儼咽フQ樹安裝在暖氣電池旁邊,所以它很快就死了。所以我決定用 Matplotlib 繪制一棵圣誕樹。你不需要為它遮陽(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")
讓我們先畫一個(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)
畫一些紅圈。它們的公式相同,但步長(zhǎng)更大。我們還通過在 sin 和 cos 參數(shù)上加 2 來移動(dòng)它,這樣它們就不會(huì)與樹本身相交。
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)樹形圖,我們需要為每一幀繪制樹形圖,并在 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圣誕樹的文章就介紹到這了,更多相關(guān)Python Matplotlib繪制3D圣誕樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用pyecharts繪制簡(jiǎn)單的折線圖
這篇文章講給大家介紹一下python使用pyecharts繪制簡(jiǎn)單的折線圖的黨法步驟,文中有詳細(xì)的代碼示例講解,對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-07-07python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法
這篇文章主要介紹了python 怎樣將dataframe中的字符串日期轉(zhuǎn)化為日期的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解
本篇文章主要介紹了Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04四行Python3代碼實(shí)現(xiàn)圖片添加美顏效果
這篇文章主要為大家介紹了如何利用Python語言實(shí)現(xiàn)給圖片添加美顏效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-04-04使用python 寫一個(gè)靜態(tài)服務(wù)(實(shí)戰(zhàn))
今天小編就為大家分享一篇使用python 寫一個(gè)靜態(tài)服務(wù)(實(shí)戰(zhàn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06pandas DataFrame 警告(SettingWithCopyWarning)的解決
這篇文章主要介紹了pandas DataFrame 警告(SettingWithCopyWarning)的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python成功解決ZeroDivisionError:?division?by?zero的方法過程
在Python編程中,ZeroDivisionError:divisionbyzero是因?yàn)閲L試除以零所導(dǎo)致的常見錯(cuò)誤,這篇文章詳細(xì)介紹了錯(cuò)誤的原因、解決方案,需要的朋友可以參考下2024-09-09