怎么使用python繪制3D瀑布圖
成品:

代碼:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import numpy as np
def line_3d(x, y, z, x_label_indexs):
"""
在y軸的每個(gè)點(diǎn),向x軸的方向延伸出一個(gè)折線面:展示每個(gè)變量的時(shí)序變化。
x: x軸,時(shí)間維,右邊。
y: y軸,變量維,左邊。
z: z軸,數(shù)值維。二維矩陣,y列x行。每一行是對(duì)應(yīng)變量的一個(gè)時(shí)間序列。
x_label_indexs: 需要標(biāo)注的時(shí)間點(diǎn)。
"""
x_num = len(x)
y_num = len(y)
if z.shape[0] != y_num or z.shape[1] != x_num:
return -1
# 制作坐標(biāo)格點(diǎn)(z中每個(gè)點(diǎn)對(duì)應(yīng)的x、y坐標(biāo))
X, Y = np.meshgrid(x, y)
# 初始化
canvas = plt.figure() # 創(chuàng)建畫(huà)布
axs = canvas.add_subplot(111, projection='3d') # 添加三維子圖
# 若把111改成234,則意思是:創(chuàng)建一個(gè)2*3的網(wǎng)格,并在第4個(gè)格子中創(chuàng)建一個(gè)axes
# 繪制折線面
for i in range(y_num): # 遍歷
# z值線,即實(shí)際數(shù)據(jù)。
axs.plot(Y[i], X[i], z[i], color=plt.cm.viridis(i/y_num),
linestyle='-', linewidth=1, marker='o', markersize=3, alpha=0.3)
# 0值線(z=0),與“地面”連接。
axs.plot(Y[i], X[i], np.zeros_like(z[i]), color='gray', alpha=0.5)
# 繪制有顏色的平面:本質(zhì)是填充z值與0值之間的區(qū)域。
polygon = [
[Y[i, 0], X[i, 0], 0], # 左下
[Y[i, -1], X[i, -1], 0], # 右下
]
for j in range(x_num-1, -1, -1): # 依次添加點(diǎn),使得polygon成為一個(gè)完整的閉合多邊形
polygon.append([Y[i, j], X[i, j], z[i, j]])
axs.add_collection3d(Poly3DCollection([polygon], color=plt.cm.viridis(i/y_num), alpha=0.3))
# 標(biāo)注數(shù)字(z值)
for k in x_label_indexs:
axs.text(Y[i, k]-0.05, X[i, k], z[i, k]+0.02, f'{z[i, k]:.2f}',
color='black', ha='center', size=7)
# 用虛線將需要標(biāo)注的時(shí)間(y)連起來(lái)
for k in x_label_indexs:
axs.plot(Y[:, k], X[:, k], z[:, k], linestyle='--', linewidth=0.8, color='gray')
axs.grid()
plt.show()
if __name__ == '__main__':
x = np.arange(5)
time = np.arange(1, 15, 2)
z = np.array(
[
[0.20, 0.34, 0.38, 0.43, 0.44, 0.50, 0.61],
[0.21, 0.40, 0.38, 0.43, 0.60, 0.72, 0.75],
[0.22, 0.43, 0.44, 0.60, 0.77, 0.84, 0.92],
[0.23, 0.42, 0.44, 0.43, 0.64, 0.77, 0.86],
[0.38, 0.42, 0.43, 0.49, 0.55, 0.60, 0.81]
]
)
line_3d(time, x, z, [1, 4, 6])總結(jié)
到此這篇關(guān)于怎么使用python繪制3D瀑布圖的文章就介紹到這了,更多相關(guān)python繪制3D瀑布圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)分析之Matplotlib的常用操作總結(jié)
Matplotlib是Python的繪圖庫(kù),它可與NumPy一起使用,提供了一種有效的MatLab開(kāi)源替代方案,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)分析之Matplotlib常用操作的相關(guān)資料,需要的朋友可以參考下2022-01-01
簡(jiǎn)單了解python關(guān)系(比較)運(yùn)算符
這篇文章主要介紹了簡(jiǎn)單了解python關(guān)系(比較)運(yùn)算符,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python?impor機(jī)制腳本模式vs模塊模式完全解析
這篇文章主要介紹了Python impor機(jī)制腳本模式vs模塊模式的相關(guān)資料,包括import的作用、腳本與模塊的區(qū)別,以及絕對(duì)導(dǎo)入和相對(duì)導(dǎo)入的方法,需要的朋友可以參考下2026-05-05
Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼)
這篇文章主要介紹了Python生命游戲?qū)崿F(xiàn)原理及過(guò)程解析(附源代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
詳細(xì)整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法
這篇文章主要介紹了詳細(xì)整理python 字符串(str)與列表(list)以及數(shù)組(array)之間的轉(zhuǎn)換方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python處理文件寫(xiě)入時(shí)文件不存在的完整解決方案
在現(xiàn)代軟件開(kāi)發(fā)中,安全地處理文件操作是每個(gè)開(kāi)發(fā)者必須掌握的核心技能,本文主要為大家詳細(xì)介紹了Python處理文件寫(xiě)入時(shí)文件不存在相關(guān)解決方法,有需要的小伙伴可以了解下2025-09-09
Django+uni-app實(shí)現(xiàn)數(shù)據(jù)通信中的請(qǐng)求跨域的示例代碼
這篇文章主要介紹了Django+uni-app實(shí)現(xiàn)數(shù)據(jù)通信中的請(qǐng)求跨域的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法
本篇文章主要介紹了TensorFlow實(shí)現(xiàn)非線性支持向量機(jī)的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

