Matplotlib 瀑布圖

Salman Mehmood 2024年2月15日
  1. 在 Python 中使用 Matplotlib 建立 2D 瀑布圖
  2. 在 Python 中使用 Matplotlib 建立 3D 瀑布圖
Matplotlib 瀑布圖

本教程將介紹如何在 Python 中建立瀑布圖或圖表。我們將使用 Matplotlib 和 waterfall_chart 庫來繪製二維和三維瀑布圖。

在 Python 中使用 Matplotlib 建立 2D 瀑布圖

瀑布圖在金融中很常見,但當你有部分到整體的關係時,瀑布圖就不是那麼有效了。

假設你想展示我們的專案成本明細。它在表格中的樣子需要一些時間讓人們瀏覽表格並比較數字。

請注意,瀑布圖不附帶 Python 預設包。首先,我們需要安裝 waterfallcharts 包。

pip install waterfallcharts

如果你在安裝過程中遇到任何錯誤,請使用以下命令升級你的 pip

python -m pip install --upgrade pip

我們需要匯入所需的庫來建立瀑布圖或繪圖。

import matplotlib.pyplot as plot
import waterfall_chart as waterfall

rcParams 引數採用鍵值對。使用此引數可以訪問圖形元素,例如圖形大小和麵部顏色。

plot.rcParams["figure.figsize"] = (8, 6)
plot.rcParams["figure.facecolor"] = "yellow"

然後我們為 XYZ 公司建立一個資料集。我們將視覺化 XYZ 公司的銷售與相應的月份。

x1, y1 = ["Jan", "Feb", "March", "April", "May", "jun", "July", "Aug"], [
    10,
    25,
    30,
    50,
    -10,
    15,
    -5,
    10,
]
waterfall.plot(
    x1,
    y1,
)

完整程式碼 - 2D 瀑布圖:

import matplotlib.pyplot as plot
import waterfall_chart as waterfall

# Set set width and height and face color as yellow
plot.rcParams["figure.figsize"] = (8, 6)
plot.rcParams["figure.facecolor"] = "yellow"
# dependant and independent variables
x1, y1 = ["Jan", "Feb", "March", "April", "May", "jun", "July", "Aug"], [
    10,
    25,
    30,
    50,
    -10,
    15,
    -5,
    10,
]
waterfall.plot(
    x1,
    y1,
)
# Set x labels with 45 rotation
plot.xticks(rotation=45)

plot.title("2D Waterfall plot")
# Add the padding and merging for visual elements
plot.tight_layout()
plot.show()

輸出:

Matplotlib 2D 瀑布圖

用綠色標出的利潤增加和損失意味著負分與紅色標出,而 XYZ 公司的淨銷售額與藍色標出。

在 Python 中使用 Matplotlib 建立 3D 瀑布圖

在前面的示例中,我們學習瞭如何建立 2D 瀑布圖。本節將演示使用 Matplotlib 庫中的 PolyCollection 類建立 3D 瀑布圖。

我們將匯入以下所需的庫來建立 3D 瀑布圖。

from matplotlib.collections import PolyCollection
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import numpy as np

如果我們想建立一個 3D 繪圖,我們需要從 pyplot 呼叫 axes() 方法。

axes = plt.axes(projection="3d")

現在我們為三個維度生成一些隨機資料集。x1 變數使用 arange() numpy 方法儲存給定範圍,y1 變數將使用 random.rand() numpy 方法在每次迭代中生成一個隨機整數。

x1 = np.arange(0, 10, 0.4)
verts = []
z1 = [0.0, 1.0, 2.0, 3.0]
for z in z1:
    y1 = np.random.rand(len(x1))
    y1[0], y1[-1] = 0, 0
    verts.append(list(zip(x1, y1)))

PolyCollection() 函式將第一個引數作為資料點列表,第二個引數是幫助我們顯示特定顏色的 facecolors。我們已經從 Matplotlib 匯入了顏色為 mcolors,並且我們定義了我們的自定義函式 colors

colors() 函式使用顏色值引數呼叫,該函式返回帶有顏色和 alpha 引數的 to_rgba() 方法。

def colors(arg):
    return mcolors.to_rgba(arg, alpha=0.6)


poly = PolyCollection(
    verts, facecolors=[colors("r"), colors("g"), colors("b"), colors("y")]
)

這只是三個維度的資料點的限制或範圍。

axes.set_xlim3d(0, 10)
axes.set_ylim3d(-1, 4)
axes.set_zlim3d(0, 1)

完整程式碼 - 3D 瀑布圖:

from matplotlib.collections import PolyCollection
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import numpy as np

axes = plt.axes(projection="3d")


def colors(arg):
    return mcolors.to_rgba(arg, alpha=0.6)


x1 = np.arange(0, 10, 0.4)
verts = []
z1 = [0.0, 1.0, 2.0, 3.0]
for z in z1:
    y1 = np.random.rand(len(x1))
    y1[0], y1[-1] = 0, 0
    verts.append(list(zip(x1, y1)))

poly = PolyCollection(
    verts, facecolors=[colors("r"), colors("g"), colors("b"), colors("y")]
)
poly.set_alpha(0.7)
axes.add_collection3d(poly, zs=z1, zdir="y")

axes.set_xlabel("X")
axes.set_xlim3d(0, 10)
axes.set_ylabel("Y")
axes.set_ylim3d(-1, 4)
axes.set_zlabel("Z")
axes.set_zlim3d(0, 1)
axes.set_title("3D Waterfall plot")

plt.show()

輸出:

Matplotlib 3D 瀑布圖

作者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

相關文章 - Matplotlib Plot