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)
函數解析:
-
ax3.set_title()
:設置當前子圖的標題 -
ax3.bar()
:繪制柱狀圖- 參數1:x軸坐標(這里使用
range(len(candidates))
生成連續整數) - 參數2:柱狀圖高度(響應時間數據)
color=colors
:設置柱子顏色(最優平臺用金色突出顯示)edgecolor='black'
:設置柱子邊框顏色alpha=0.7
:設置透明度(0-1之間)
- 參數1:x軸坐標(這里使用
-
坐標軸設置:
ax3.set_xticks()
:設置x軸刻度位置ax3.set_xticklabels()
:設置x軸刻度標簽rotation=45
:標簽旋轉45度,避免重疊
ax3.set_ylabel()
:設置y軸標簽
-
添加數據標簽:
ax3.text()
:在指定位置添加文本- 參數1,2:文本位置坐標
- 參數3:要顯示的文本內容(格式化的響應時間)
ha='center'
:水平居中對齊va='bottom'
:垂直底部對齊
-
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)
這段代碼與前面的柱狀圖繪制邏輯相似,但有幾個值得注意的點:
- 數據排序:先對候選平臺按響應時間排序,使圖表更具可讀性
- 顏色方案:使用不同的顏色方案區分不同類型的柱狀圖
- 同時展示了總響應時間和平均響應時間兩組數據,便于對比分析
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 繪制柱狀圖的方法和相關函數。主要知識點包括:
- 多子圖布局的創建與管理
- 柱狀圖的繪制與樣式設置
- 坐標軸標簽和標題的設置
- 數據標簽的添加方法
- 圖表的保存與顯示
通過靈活運用這些函數和技巧,可以創建出清晰、美觀且信息豐富的數據可視化圖表,為數據分析和決策提供有力支持。在實際應用中,還可以根據需求調整圖表樣式、顏色方案和布局,以達到最佳的可視化效果。