欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2024年09月25日 10:29:19   作者:ww大魔王丷  
這篇文章主要介紹了怎么使用python繪制3D瀑布圖的相關(guān)資料,瀑布圖是由麥肯錫顧問公司所獨(dú)創(chuàng)的圖表類型,因?yàn)樾嗡破俨剂魉Q之為瀑布圖(Waterfall Plot),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

成品:

代碼:

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軸的每個點(diǎn),向x軸的方向延伸出一個折線面:展示每個變量的時序變化。
    x: x軸,時間維,右邊。
    y: y軸,變量維,左邊。
    z: z軸,數(shù)值維。二維矩陣,y列x行。每一行是對應(yīng)變量的一個時間序列。
    x_label_indexs: 需要標(biāo)注的時間點(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中每個點(diǎn)對應(yīng)的x、y坐標(biāo))
    X, Y = np.meshgrid(x, y)

    # 初始化
    canvas = plt.figure()  # 創(chuàng)建畫布
    axs = canvas.add_subplot(111, projection='3d')  # 添加三維子圖
    # 若把111改成234,則意思是:創(chuàng)建一個2*3的網(wǎng)格,并在第4個格子中創(chuàng)建一個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成為一個完整的閉合多邊形
            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)注的時間(y)連起來
    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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論