最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python打造帶類別標(biāo)簽的三維柱狀圖

 更新時(shí)間:2025年07月11日 09:08:38   作者:Code_Verse  
帶類別標(biāo)簽的三維柱狀圖是一種在三維空間中展示分類數(shù)據(jù)的可視化工具,下面小編就來(lái)和大家詳細(xì)介紹一下如何使用Python打造帶類別標(biāo)簽的三維柱狀圖吧

一、帶類別標(biāo)簽的三維柱狀圖介紹

帶類別標(biāo)簽的三維柱狀圖是一種在三維空間中展示分類數(shù)據(jù)的可視化工具。它不僅能夠通過(guò)柱子的高度直觀地表示數(shù)據(jù)的大小,還能通過(guò)顏色或圖例區(qū)分不同的類別。這種圖表特別適合展示多組數(shù)據(jù)之間的對(duì)比關(guān)系,例如不同類別在某個(gè)變量上的表現(xiàn),或者多個(gè)類別在不同條件下的差異。

特點(diǎn)

  • 三維空間展示:通過(guò) x、y、z 三個(gè)坐標(biāo)軸,展示數(shù)據(jù)的多維度信息。
  • 分類標(biāo)注:通過(guò)顏色或圖例區(qū)分不同的類別,使圖表更具表現(xiàn)力。
  • 直觀對(duì)比:柱子的高度直觀地反映了數(shù)據(jù)的大小,方便進(jìn)行對(duì)比分析。

應(yīng)用場(chǎng)景

  • 數(shù)據(jù)分析:展示不同類別在某個(gè)指標(biāo)上的表現(xiàn),例如不同產(chǎn)品的銷售額。
  • 科學(xué)研究:比較不同實(shí)驗(yàn)組在某個(gè)變量上的差異,例如不同藥物的療效。
  • 商業(yè)報(bào)告:呈現(xiàn)市場(chǎng)調(diào)研結(jié)果,例如不同地區(qū)的消費(fèi)偏好。

二、數(shù)據(jù)類型準(zhǔn)備

在繪制帶類別標(biāo)簽的三維柱狀圖之前,我們需要準(zhǔn)備以下幾類數(shù)據(jù):

  • 坐標(biāo)數(shù)據(jù):用于確定柱子在三維空間中的位置。通常包括 x、y 坐標(biāo),它們可以是連續(xù)的數(shù)值,也可以是離散的類別。
  • 高度數(shù)據(jù):表示柱子的高度,反映了數(shù)據(jù)的大小。它是一個(gè)二維數(shù)組,每個(gè)元素對(duì)應(yīng)一個(gè)柱子的高度。
  • 類別標(biāo)簽(可選):如果需要對(duì)柱子進(jìn)行分類標(biāo)注,還需要準(zhǔn)備類別標(biāo)簽。這些標(biāo)簽可以是數(shù)字、字符串等,用于區(qū)分不同類別的柱子。

在代碼中,數(shù)據(jù)要準(zhǔn)備好:

  • xy 是坐標(biāo)數(shù)據(jù),通過(guò) np.arangenp.meshgrid 生成了一個(gè) 10×10 的網(wǎng)格。
  • z_height 是高度數(shù)據(jù),是一個(gè) 10×10 的二維數(shù)組,每個(gè)元素表示對(duì)應(yīng)位置柱子的高度。
  • 類別標(biāo)簽沒(méi)有明確給出,但從 z_height 的值可以推斷出不同的高度對(duì)應(yīng)不同的類別。

三、代碼解釋

以下是代碼的詳細(xì)解釋,幫助你理解每一步的作用。

導(dǎo)入必要的庫(kù)

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import rcParams
  • matplotlib.pyplot 是用于繪圖的庫(kù)。
  • numpy 是用于數(shù)值計(jì)算的庫(kù),方便生成和操作數(shù)據(jù)。
  • mpl_toolkits.mplot3d 提供了三維繪圖的功能。
  • rcParams 用于設(shè)置全局的繪圖參數(shù),比如字體和負(fù)號(hào)顯示。

設(shè)置支持中文的字體

rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False

這兩行代碼的作用是讓圖表支持中文顯示,并且正確顯示負(fù)號(hào)。如果不設(shè)置,可能會(huì)出現(xiàn)中文亂碼或負(fù)號(hào)顯示不正常的情況。

數(shù)據(jù)準(zhǔn)備

x = np.arange(1, 11)
y = np.arange(1, 11)
x, y = np.meshgrid(x, y)
z = np.zeros_like(x)
z_height = np.array([[5, 3, 8, 6, 7, 2, 9, 4, 5, 6],
                    [4, 5, 7, 8, 6, 3, 5, 2, 4, 3],
                    [7, 8, 6, 5, 4, 9, 3, 7, 8, 6],
                    [2, 4, 3, 7, 8, 5, 6, 9, 4, 5],
                    [6, 7, 8, 5, 4, 3, 2, 6, 7, 8],
                    [3, 2, 5, 4, 6, 7, 8, 5, 3, 2],
                    [8, 6, 7, 3, 2, 4, 5, 7, 8, 6],
                    [5, 4, 2, 6, 7, 8, 3, 5, 4, 2],
                    [9, 3, 7, 8, 6, 5, 4, 9, 3, 7],
                    [4, 5, 6, 7, 8, 9, 2, 4, 5, 6]])
  • xy 是通過(guò) np.arange 生成的從 1 到 10 的數(shù)組,表示 x 和 y 坐標(biāo)。
  • np.meshgridxy 轉(zhuǎn)換為網(wǎng)格形式,生成一個(gè)二維數(shù)組,方便后續(xù)繪制柱子的位置。
  • z 是一個(gè)全為零的二維數(shù)組,表示柱子的底部在 z 軸上的位置。
  • z_height 是一個(gè)二維數(shù)組,表示每個(gè)柱子的高度。

圖形設(shè)置

fig = plt.figure(figsize=(10, 8), dpi=100)
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=30, azim=135)
  • plt.figure 創(chuàng)建一個(gè)圖形窗口,figsize 設(shè)置圖形的大小,dpi 設(shè)置圖形的分辨率。
  • fig.add_subplot 添加一個(gè)子圖,projection='3d' 表示這是一個(gè)三維圖形。
  • ax.view_init 設(shè)置三維圖形的視角,elev 是仰角,azim 是方位角。

顏色映射

norm = plt.Normalize(vmin=np.min(z_height), vmax=np.max(z_height))
cmap = plt.cm.viridis
colors = cmap(norm(z_height.flatten()))
  • plt.Normalize 將高度數(shù)據(jù)歸一化到 [0, 1] 范圍內(nèi),方便后續(xù)的顏色映射。
  • plt.cm.viridis 是一種顏色映射方案,它會(huì)根據(jù)歸一化后的值生成對(duì)應(yīng)的顏色。
  • cmap(norm(z_height.flatten())) 將歸一化后的高度數(shù)據(jù)映射為顏色,flatten 是將二維數(shù)組展平為一維數(shù)組。

繪制柱子

for i in range(len(x.flatten())):
    ax.bar3d(
        x.flatten()[i], y.flatten()[i], z.flatten()[i],
        0.5, 0.5, z_height.flatten()[i],
        color=colors[i],
        edgecolor='black',
        linewidth=0.3,
        shade=True
    )
  • ax.bar3d 是繪制三維柱狀圖的函數(shù)。
  • x.flatten()[i]、y.flatten()[i]z.flatten()[i] 是柱子的底部坐標(biāo)。
  • 0.5, 0.5 是柱子在 x 和 y 方向上的寬度。
  • z_height.flatten()[i] 是柱子的高度。
  • color=colors[i] 設(shè)置柱子的顏色。
  • edgecolor='black' 設(shè)置柱子邊緣的顏色。
  • linewidth=0.3 設(shè)置邊緣的線寬。
  • shade=True 開(kāi)啟陰影效果,使圖形更加立體。

坐標(biāo)軸標(biāo)簽和標(biāo)題

ax.set_xlabel('變量1', fontsize=12, labelpad=10)
ax.set_ylabel('變量2', fontsize=12, labelpad=10)
ax.set_zlabel('值', fontsize=12, labelpad=10)
ax.set_title('3D柱狀圖示例', fontsize=14, pad=20)
  • ax.set_xlabel、ax.set_ylabelax.set_zlabel 分別設(shè)置 x、y 和 z 軸的標(biāo)簽。
  • fontsize 設(shè)置標(biāo)簽的字體大小。
  • labelpad 設(shè)置標(biāo)簽與坐標(biāo)軸的距離。
  • ax.set_title 設(shè)置圖形的標(biāo)題。

圖例

legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label=f'類別{i+1}',
                              markerfacecolor=colors[i % len(colors)], markersize=10)
                  for i in range(len(np.unique(z_height.flatten())))]
ax.legend(handles=legend_elements, loc='upper left')
  • plt.Line2D 創(chuàng)建一個(gè)圖例元素,marker='o' 表示用圓形標(biāo)記,color='w' 表示標(biāo)記的邊框顏色為白色,markerfacecolor 設(shè)置標(biāo)記的填充顏色,markersize 設(shè)置標(biāo)記的大小。
  • label=f'類別{i+1}' 設(shè)置圖例的標(biāo)簽。
  • colors[i % len(colors)] 根據(jù)類別數(shù)量循環(huán)使用顏色。
  • ax.legend 添加圖例,handles 是圖例元素列表,loc 設(shè)置圖例的位置。

網(wǎng)格和背景

ax.grid(True)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False
  • ax.grid(True) 開(kāi)啟網(wǎng)格。
  • ax.xaxis.pane.fill = False 等語(yǔ)句將坐標(biāo)軸的背景填充關(guān)閉,使圖形更加簡(jiǎn)潔。

顯示圖形

plt.tight_layout()
plt.show()
  • plt.tight_layout():自動(dòng)調(diào)整子圖參數(shù),使其填充整個(gè)圖形區(qū)域,避免標(biāo)簽或標(biāo)題被裁剪。這在圖形中有多個(gè)子圖或標(biāo)簽較長(zhǎng)時(shí)特別有用,可以確保布局更加美觀。
  • plt.show():顯示最終繪制的圖形。此函數(shù)會(huì)打開(kāi)一個(gè)窗口,展示完整的三維柱狀圖,包括所有柱子、標(biāo)簽、圖例和網(wǎng)格等元素。

四、運(yùn)行代碼

將上述代碼復(fù)制到你的 Python 環(huán)境中(比如 Jupyter Notebook 或 PyCharm),運(yùn)行代碼后,你會(huì)看到一個(gè)三維柱狀圖。圖中的柱子高度表示數(shù)據(jù)的大小,顏色表示不同的類別,圖例會(huì)顯示每個(gè)類別的顏色對(duì)應(yīng)關(guān)系,事例如下圖:

如果你在運(yùn)行過(guò)程中遇到任何問(wèn)題,比如報(bào)錯(cuò)或顯示不正確,可以檢查以下幾點(diǎn):

確保安裝了 matplotlibnumpy 庫(kù)。

檢查代碼中是否有拼寫(xiě)錯(cuò)誤。

確保你的 Python 環(huán)境支持中文顯示。

完整代碼如下:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import rcParams
# 設(shè)置支持中文的字體為黑體(SimHei)
rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False  
# 數(shù)據(jù)準(zhǔn)備
x = np.arange(1, 11)
y = np.arange(1, 11)
x, y = np.meshgrid(x, y)
z = np.zeros_like(x)
z_height = np.array([[5, 3, 8, 6, 7, 2, 9, 4, 5, 6],
                    [4, 5, 7, 8, 6, 3, 5, 2, 4, 3],
                    [7, 8, 6, 5, 4, 9, 3, 7, 8, 6],
                    [2, 4, 3, 7, 8, 5, 6, 9, 4, 5],
                    [6, 7, 8, 5, 4, 3, 2, 6, 7, 8],
                    [3, 2, 5, 4, 6, 7, 8, 5, 3, 2],
                    [8, 6, 7, 3, 2, 4, 5, 7, 8, 6],
                    [5, 4, 2, 6, 7, 8, 3, 5, 4, 2],
                    [9, 3, 7, 8, 6, 5, 4, 9, 3, 7],
                    [4, 5, 6, 7, 8, 9, 2, 4, 5, 6]])
# 圖形設(shè)置
fig = plt.figure(figsize=(10, 8), dpi=100)
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=30, azim=135)  # 更佳視角
# 顏色映射
norm = plt.Normalize(vmin=np.min(z_height), vmax=np.max(z_height))
cmap = plt.cm.viridis  
colors = cmap(norm(z_height.flatten()))
# 繪制柱子
for i in range(len(x.flatten())):
    ax.bar3d(
        x.flatten()[i], y.flatten()[i], z.flatten()[i],
        0.5, 0.5, z_height.flatten()[i],  
        color=colors[i],
        edgecolor='black', 
        linewidth=0.3,
        shade=True
    )
# 坐標(biāo)軸標(biāo)簽
ax.set_xlabel('變量1', fontsize=12, labelpad=10)
ax.set_ylabel('變量2', fontsize=12, labelpad=10)
ax.set_zlabel('值', fontsize=12, labelpad=10)
# 標(biāo)題
ax.set_title('3D柱狀圖示例', fontsize=14, pad=20)
# 圖例
legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label=f'類別{i+1}',
                              markerfacecolor=colors[i % len(colors)], markersize=10)
                  for i in range(len(np.unique(z_height.flatten())))]
ax.legend(handles=legend_elements, loc='upper left')
# 網(wǎng)格和背景
ax.grid(True)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False

plt.tight_layout()
plt.show()

五、總結(jié)

通過(guò)本教程,你學(xué)會(huì)了如何使用 Python 繪制帶類別標(biāo)簽的三維柱狀圖。我們從數(shù)據(jù)準(zhǔn)備開(kāi)始,逐步介紹了如何設(shè)置圖形、繪制柱子、添加標(biāo)簽和圖例,并最終生成了一個(gè)酷炫的三維柱狀圖。這種圖表非常適合展示多變量數(shù)據(jù)之間的關(guān)系,尤其是當(dāng)你需要對(duì)數(shù)據(jù)進(jìn)行分類標(biāo)注時(shí)。

如果你對(duì)三維柱狀圖有更多想法或需求,比如添加動(dòng)畫(huà)效果、調(diào)整顏色映射等,可以繼續(xù)探索 matplotlib 的強(qiáng)大功能。

到此這篇關(guān)于使用Python打造帶類別標(biāo)簽的三維柱狀圖的文章就介紹到這了,更多相關(guān)Python三維柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python學(xué)習(xí)之基于Python的人臉識(shí)別技術(shù)學(xué)習(xí)

    python學(xué)習(xí)之基于Python的人臉識(shí)別技術(shù)學(xué)習(xí)

    面部識(shí)別技術(shù)的應(yīng)用越來(lái)越廣泛,它廣泛應(yīng)用于安全系統(tǒng)、人機(jī)交互、社交媒體、醫(yī)療保健等領(lǐng)域。本文介紹了基于Python的人臉識(shí)別技術(shù),感興趣的小伙伴可以參考閱讀
    2023-03-03
  • 基于Python自動(dòng)化實(shí)現(xiàn)Word文檔專業(yè)排版

    基于Python自動(dòng)化實(shí)現(xiàn)Word文檔專業(yè)排版

    在辦公自動(dòng)化領(lǐng)域,用 Python 處理 Word 文檔已經(jīng)是非常成熟和高效的方案了,本文將和大家使用Python實(shí)現(xiàn)自動(dòng)化Word文檔排版的相關(guān)知識(shí),希望對(duì)大家有所幫助
    2026-05-05
  • 如何利用PyQt5美化你的GUI界面

    如何利用PyQt5美化你的GUI界面

    python的腳本開(kāi)發(fā)簡(jiǎn)單,有時(shí)候只需幾行代碼就能實(shí)現(xiàn)豐富的功能,而且python本身是跨平臺(tái)的,所以深受程序員的喜愛(ài),下面這篇文章主要給大家介紹了關(guān)于如何利用PyQt5美化你的GUI界面的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python多線程獲取返回值代碼實(shí)例

    Python多線程獲取返回值代碼實(shí)例

    這篇文章主要介紹了Python多線程獲取返回值代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 基于python cut和qcut的用法及區(qū)別詳解

    基于python cut和qcut的用法及區(qū)別詳解

    今天小編就為大家分享一篇基于python cut和qcut的用法及區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python?count()函數(shù)用法詳解

    Python?count()函數(shù)用法詳解

    這篇文章主要給大家介紹了關(guān)于Python?count()函數(shù)用法的相關(guān)資料,Python?count()方法用于統(tǒng)計(jì)字符串里某個(gè)字符出現(xiàn)的次數(shù),可選參數(shù)為在字符串搜索的開(kāi)始與結(jié)束位置,需要的朋友可以參考下
    2024-02-02
  • Python通過(guò)DOM和SAX方式解析XML的應(yīng)用實(shí)例分享

    Python通過(guò)DOM和SAX方式解析XML的應(yīng)用實(shí)例分享

    這篇文章主要介紹了Python通過(guò)DOM和SAX方式解析XML的應(yīng)用實(shí)例分享,針對(duì)這兩種解析方式Python都有相關(guān)的模塊可供使用,需要的朋友可以參考下
    2015-11-11
  • python GUI框架pyqt5 對(duì)圖片進(jìn)行流式布局的方法(瀑布流flowlayout)

    python GUI框架pyqt5 對(duì)圖片進(jìn)行流式布局的方法(瀑布流flowlayout)

    這篇文章主要介紹了python GUI框架pyqt5 對(duì)圖片進(jìn)行流式布局的方法(瀑布流flowlayout),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例

    Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例

    這篇文章主要介紹了Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能,結(jié)合具體實(shí)例形式分析了Python實(shí)現(xiàn)修飾器針對(duì)函數(shù)參數(shù)檢查的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • PyQt5簡(jiǎn)單讀取以及顯示圖片的應(yīng)用實(shí)例

    PyQt5簡(jiǎn)單讀取以及顯示圖片的應(yīng)用實(shí)例

    我們?cè)谶M(jìn)行圖像處理時(shí),經(jīng)常會(huì)用到讀取圖片并顯示出來(lái)這樣的操作,下面這篇文章主要給大家介紹了關(guān)于PyQt5簡(jiǎn)單讀取以及顯示圖片應(yīng)用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論

兴宁市| 德令哈市| 黑龙江省| 广汉市| 孝义市| 绥滨县| 通辽市| 确山县| 富裕县| 曲沃县| 社会| 阿鲁科尔沁旗| 电白县| 兴国县| 平舆县| 黄浦区| 湟中县| 汶川县| 桑植县| 红河县| 旺苍县| 东方市| 西乌| 高密市| 利川市| 佛坪县| 宽城| 宾川县| 镇安县| 松滋市| 南华县| 共和县| 乌苏市| 平塘县| 宣城市| 康马县| 临海市| 衢州市| 塘沽区| 锡林浩特市| 霍山县|