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 绘制柱状图的方法和相关函数。主要知识点包括:
- 多子图布局的创建与管理
- 柱状图的绘制与样式设置
- 坐标轴标签和标题的设置
- 数据标签的添加方法
- 图表的保存与显示
通过灵活运用这些函数和技巧,可以创建出清晰、美观且信息丰富的数据可视化图表,为数据分析和决策提供有力支持。在实际应用中,还可以根据需求调整图表样式、颜色方案和布局,以达到最佳的可视化效果。