Python 數據可視化:柱狀圖/熱力圖繪制實例解析

Python 數據可視化:柱狀圖繪制實例解析

一、引言

數據可視化是數據分析中至關重要的環節,它能將復雜的數據以直觀的圖形方式呈現,幫助我們更好地理解數據特征和規律。Python 擁有豐富的可視化庫,其中 Matplotlib 是最常用的基礎庫之一,能夠繪制多種類型的圖表。

本文將以雙平臺優化算法代碼中的可視化部分為例,詳細解讀柱狀圖的繪制方法及相關函數的使用。

二、Matplotlib 基礎

Matplotlib 是 Python 中最流行的繪圖庫,提供了類似 MATLAB 的繪圖接口,支持多種圖表類型。在代碼中,主要通過 matplotlib.pyplot 模塊(通常簡寫為 plt)進行繪圖操作。

核心概念:

  • Figure:畫布,是所有圖表的容器
  • Axes:子圖,一個畫布可以包含多個子圖
  • 面向對象編程:通過子圖對象(ax)調用繪圖方法

三、代碼中的可視化實現解析

在提供的代碼中,DualPlatformOptimization 類包含兩個主要的可視化方法:create_visualizations()create_candidate_comparison_chart(),主要用于展示雙平臺優化的結果。

3.1 多子圖布局創建

# 創建主要可視化圖
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(16, 12))
fig.suptitle('大型分組雙平臺優化分析', fontsize=16, fontweight='bold')

函數解析:

  • plt.subplots(2, 2, figsize=(16, 12)):創建一個 2x2 的子圖布局(共4個子圖)
    • 參數 2, 2:表示 2 行 2 列的子圖布局
    • 參數 figsize=(16, 12):設置整個畫布的尺寸(寬16,高12)
  • fig.suptitle():設置整個畫布的總標題
    • fontsize:設置字體大小
    • fontweight='bold':設置字體為粗體

3.2 候選平臺響應時間對比柱狀圖

# 圖3: 候選平臺評估對比
ax3.set_title('候選平臺響應時間對比', fontweight='bold')if self.analysis_results and 'all_evaluations' in self.analysis_results:candidates = list(self.analysis_results['all_evaluations'].keys())response_times = [self.analysis_results['all_evaluations'][c]['total_response_time'] for c in candidates]# 只顯示前10個候選平臺以避免圖表過于擁擠if len(candidates) > 10:# 按響應時間排序,顯示最好的10個sorted_pairs = sorted(zip(candidates, response_times), key=lambda x: x[1])candidates = [p[0] for p in sorted_pairs[:10]]response_times = [p[1] for p in sorted_pairs[:10]]colors = ['gold' if c == self.optimal_second_platform else 'lightblue' for c in candidates]bars = ax3.bar(range(len(candidates)), response_times, color=colors, edgecolor='black', alpha=0.7)ax3.set_xticks(range(len(candidates)))ax3.set_xticklabels([f'路口{c}' for c in candidates], rotation=45)ax3.set_ylabel('總響應時間')# 添加數值標簽for bar, time in zip(bars, response_times):height = bar.get_height()ax3.text(bar.get_x() + bar.get_width()/2., height + height*0.01,f'{time:.1f}', ha='center', va='bottom', fontsize=8)ax3.grid(True, alpha=0.3)

函數解析:

  1. ax3.set_title():設置當前子圖的標題

  2. ax3.bar():繪制柱狀圖

    • 參數1:x軸坐標(這里使用 range(len(candidates)) 生成連續整數)
    • 參數2:柱狀圖高度(響應時間數據)
    • color=colors:設置柱子顏色(最優平臺用金色突出顯示)
    • edgecolor='black':設置柱子邊框顏色
    • alpha=0.7:設置透明度(0-1之間)
  3. 坐標軸設置:

    • ax3.set_xticks():設置x軸刻度位置
    • ax3.set_xticklabels():設置x軸刻度標簽
      • rotation=45:標簽旋轉45度,避免重疊
    • ax3.set_ylabel():設置y軸標簽
  4. 添加數據標簽:

    • ax3.text():在指定位置添加文本
      • 參數1,2:文本位置坐標
      • 參數3:要顯示的文本內容(格式化的響應時間)
      • ha='center':水平居中對齊
      • va='bottom':垂直底部對齊
  5. ax3.grid(True, alpha=0.3):顯示網格線,alpha 設置網格線透明度

3.3 候選平臺詳細對比柱狀圖

# 總響應時間對比
colors1 = ['gold' if c == self.optimal_second_platform else 'lightcoral' for c in candidates_sorted]
bars1 = ax1.bar(range(len(candidates_sorted)), total_times_sorted, color=colors1, alpha=0.7, edgecolor='black')
ax1.set_title('候選平臺總響應時間對比', fontweight='bold')
ax1.set_xlabel('候選平臺')
ax1.set_ylabel('總響應時間')
ax1.set_xticks(range(len(candidates_sorted)))
ax1.set_xticklabels([f'路口{c}' for c in candidates_sorted], rotation=45)# 添加數值標簽
for bar, time in zip(bars1, total_times_sorted):height = bar.get_height()ax1.text(bar.get_x() + bar.get_width()/2., height + height*0.01,f'{time:.1f}', ha='center', va='bottom', fontsize=8)

這段代碼與前面的柱狀圖繪制邏輯相似,但有幾個值得注意的點:

  1. 數據排序:先對候選平臺按響應時間排序,使圖表更具可讀性
  2. 顏色方案:使用不同的顏色方案區分不同類型的柱狀圖
  3. 同時展示了總響應時間和平均響應時間兩組數據,便于對比分析

3.4 圖表保存與顯示

plt.tight_layout()
plt.savefig('大型分組雙平臺優化分析.png', dpi=300, bbox_inches='tight')
print("可視化圖表已保存: 大型分組雙平臺優化分析.png")
plt.show()

函數解析:

  • plt.tight_layout():自動調整子圖參數,使子圖之間的布局更合理
  • plt.savefig():保存圖表到文件
    • 參數1:文件名
    • dpi=300:設置圖像分辨率(300dpi適合印刷)
    • bbox_inches='tight':去除圖像周圍的空白區域
  • plt.show():顯示圖表

四、熱力圖繪制簡介

雖然提供的代碼中沒有熱力圖的實現,但熱力圖是另一種常用的可視化方式,通常用于展示數據的矩陣分布。以下是使用 Matplotlib 繪制熱力圖的基本示例:

import numpy as np
import matplotlib.pyplot as plt# 生成示例數據
data = np.random.rand(10, 10)  # 10x10的隨機數據矩陣# 創建畫布和子圖
fig, ax = plt.subplots(figsize=(8, 6))# 繪制熱力圖
heatmap = ax.imshow(data, cmap='viridis')# 添加顏色條
cbar = plt.colorbar(heatmap)
cbar.set_label('數值強度')# 設置標題和坐標軸標簽
ax.set_title('熱力圖示例')
ax.set_xlabel('X軸')
ax.set_ylabel('Y軸')plt.tight_layout()
plt.show()

主要函數解析:

  • ax.imshow():繪制熱力圖,cmap 參數指定顏色映射方案
  • plt.colorbar():添加顏色條,用于解釋顏色對應的數值

五、總結

本文以雙平臺優化算法代碼為例,詳細解析了使用 Matplotlib 繪制柱狀圖的方法和相關函數。主要知識點包括:

  1. 多子圖布局的創建與管理
  2. 柱狀圖的繪制與樣式設置
  3. 坐標軸標簽和標題的設置
  4. 數據標簽的添加方法
  5. 圖表的保存與顯示

通過靈活運用這些函數和技巧,可以創建出清晰、美觀且信息豐富的數據可視化圖表,為數據分析和決策提供有力支持。在實際應用中,還可以根據需求調整圖表樣式、顏色方案和布局,以達到最佳的可視化效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919204.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919204.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

API生命周期10階段

一、策略規劃(Strategy Planning) 核心任務:業務價值對齊、技術路線設計關鍵產出: API產品藍圖:定義業務領域邊界(如支付API域、用戶API域)治理規范:《API安全標準》《版本管理策略》…

UGUI源碼剖析(9):布局的實現——LayoutGroup的算法與實踐

UGUI源碼剖析(第九章):布局的實現——LayoutGroup的算法與實踐 在前一章中,我們剖析了LayoutRebuilder是如何調度布局重建的。現在,我們將深入到布局核心,去看看那些具體的組件——LayoutGroup系列組件是如…

GitHub PR 提交流程

step1 在 GitHub 上 fork 目標倉庫&#xff08;手動操作&#xff09; step2 將 fork 的目標倉庫克隆到本地 git clone https://github.com/<your-username>/<repo-name>.git cd <repo-name>step3 與上游目標倉庫建立鏈接 git remote add upstream https://gi…

礦物分類案列 (一)六種方法對數據的填充

目錄 礦物數據項目介紹&#xff1a; 數據問題與處理方案&#xff1a; 數據填充策略討論&#xff1a; 模型選擇與任務類型&#xff1a; 模型訓練計劃&#xff1a; 一.數據集填充 1.讀取數據 2.把標簽轉化為數值 3.把異常數據轉化為nan 4.數據Z標準化 5.劃分訓練集測試…

vue:vue3的方法torefs和方法toref

在 Vue 3 的 Composition API 中,toRef 和 toRefs 是兩個用于處理響應式數據的重要工具,它們專門用于從 reactive() 對象中提取屬性并保持響應性。 toRef() 作用:將 reactive 對象的單個屬性轉換為一個 ref 對象,保持與源屬性的響應式連接。 使用場景: 需要單獨提取 rea…

Android 移動端 UI 設計:前端常用設計原則總結

在 Android 移動端開發中&#xff0c;優秀的 UI 設計不僅需要視覺上的美觀&#xff0c;更需要符合用戶習慣、提升操作效率的設計邏輯。前端 UI 設計原則是指導開發者將功能需求轉化為優質用戶體驗的核心準則&#xff0c;這些原則貫穿于布局結構、交互反饋、視覺呈現等各個環節。…

計算機網絡 TCP三次握手、四次揮手超詳細流程【報文交換、狀態變化】

TCP&#xff08;傳輸控制協議&#xff09;是互聯網最重要的協議之一&#xff0c;它保證了數據的可靠、有序傳輸。連接建立時的“三次握手”和連接關閉時的“四次揮手”是其核心機制&#xff0c;涉及特定的報文交換和狀態變化。 一、TCP 三次握手&#xff08;Three-Way Handshak…

使用Applications Manager進行 Apache Solr 監控

Apache Solr 為一些對性能極為敏感的環境提供搜索支持&#xff1a;電子商務、企業應用、內容門戶和內部知識系統。因此&#xff0c;當出現延遲增加或結果不一致的情況時&#xff0c;用戶會立刻察覺。而當這些問題未被發現時&#xff0c;情況會迅速惡化。 Apache Solr 基于 Apa…

Shell腳本-for循環語法結構

一、前言在 Linux Shell 腳本編程中&#xff0c;for 循環 是最常用的控制結構之一&#xff0c;用于重復執行一段命令&#xff0c;特別適用于處理列表、文件、數字序列等場景。本文將詳細介紹 Shell 腳本中 for 循環的各種語法結構&#xff0c;包括&#xff1a;? 經典 for in 結…

記SpringBoot3.x + Thymeleaf 項目實現(MVC架構模式)

目錄 前言 一、創建SpringBoot項目 1. 創建項目 2. 運行項目 二、連接數據庫實現登錄 1. pom.xml文件引入依賴包 2. application.yml文件配置 3. 數據持久層&#xff0c;mybatis操作映射 4. Service接口及實現 5. Controller代碼 6. Thymeleaf頁面登錄 7. 運行項目…

Java 導出word 實現表格內插入圖表(柱狀圖、折線圖、餅狀圖)--可編輯數據

表格內插入圖表導出效果表格內圖表生成流程分析 核心問題與解決方案 問題 Word 圖表作為獨立對象&#xff0c;容易與文本分離位置難以精確控制&#xff0c;編輯時容易偏移缺乏與表格數據的關聯性 解決方案 直接嵌入&#xff1a;將圖表嵌入表格單元格&#xff0c;確保數據關聯精…

北京JAVA基礎面試30天打卡12

1.MySQL中count(*)、count(I)和count(字段名)有什么區別&#xff1f; 1**.COUNT ()**是效率最高的統計方式&#xff1a;COUNT()被優化為常量&#xff0c;直接統計表的所有記錄數&#xff0c;不依賴字段內容&#xff0c;開銷最低。推薦在統計整個表的記錄數時使用。 2.**COUNT(1…

【AI】——結合Ollama、Open WebUI和Docker本地部署可視化AI大語言模型

&#x1f3bc;個人主頁&#xff1a;【Y小夜】 &#x1f60e;作者簡介&#xff1a;一位雙非學校的大三學生&#xff0c;編程愛好者&#xff0c; 專注于基礎和實戰分享&#xff0c;歡迎私信咨詢&#xff01; &#x1f386;入門專欄&#xff1a;&#x1f387;【MySQL&#xff0…

RAG學習(二)

構建索引 一、向量嵌入 向量嵌入&#xff08;Embedding&#xff09;是一種將真實世界中復雜、高維的數據對象&#xff08;如文本、圖像、音頻、視頻等&#xff09;轉換為數學上易于處理的、低維、稠密的連續數值向量的技術。 想象一下&#xff0c;我們將每一個詞、每一段話、…

亞馬遜店鋪績效巡檢_影刀RPA源碼解讀

一、項目簡介 本項目是一個基于RPA開發的店鋪績效巡店機器人。該機器人能夠自動化地登錄賣家后臺&#xff0c;遍歷多個店鋪和站點&#xff0c;收集并分析各類績效數據&#xff0c;包括政策合規性、客戶服務績效、配送績效等關鍵指標&#xff0c;并將數據整理到Excel報告中&…

跨越南北的養老對話:為培養“銀發中國”人才注入新動能

2025年8月16日&#xff0c;北京養老行業協會常務副會長陳楫寶一行到訪廣州市白云區粵榮職業培訓學校&#xff0c;受到頤年集團副總李娜的熱情接待。此次訪問不僅是京穗兩地養老行業的一次深度交流&#xff0c;更為推動全國智慧養老體系建設、提升養老服務專業化水平注入了新動能…

Spring IOC 學習筆記

1. 概述Spring IOC&#xff08;Inversion of Control&#xff0c;控制反轉&#xff09;是一種設計思想&#xff0c;通過依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;實現。它的核心思想是將對象的創建和依賴關系的管理交給Spring容器&#xff0c;從而降…

揭開Android Vulkan渲染封印:幀率暴增的底層指令

ps&#xff1a;本文內容較干&#xff0c;建議收藏后反復邊跟進源碼邊思考設計思想。壹渲染管線的基礎架構為什么叫渲染管線&#xff1f;這里是因為整個渲染的過程涉及多道工序&#xff0c;像管道里的流水線一樣&#xff0c;一道一道的處理數據的過程&#xff0c;所以使用渲染管…

HTTP 請求轉發與重定向詳解及其應用(含 Java 示例)

在 Web 開發中&#xff0c;我們經常需要在不同頁面之間跳轉&#xff0c;比如登錄成功后跳到首頁、提交表單后跳到結果頁面。這時&#xff0c;常見的兩種跳轉方式就是 請求轉發&#xff08;Request Forward&#xff09; 和 重定向&#xff08;Redirect&#xff09;。雖然它們都能…

如何將 MCP Server (FastMCP) 配置為公網訪問(監聽 0.0.0.0)

如何將 MCP Server &#xff08;FastMCP&#xff09; 配置為公網訪問&#xff08;監聽 0.0.0.0&#xff09;引言常見錯誤嘗試根本原因&#xff1a;從源碼解析正確的解決方案總結引言 在使用 Model Context Protocol(MCP) 框架開發自定義工具服務器時&#xff0c;我們經常使用 …