当前位置: 首页 > news >正文

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.dtcms.com/a/332785.html

相关文章:

  • 概率论基础教程第2章概率论公理
  • 享元模式C++
  • 基于深度学习的零件缺陷识别方法研究(LW+源码+讲解+部署)
  • 力扣hot100 | 普通数组 | 53. 最大子数组和、56. 合并区间、189. 轮转数组、238. 除自身以外数组的乘积、41. 缺失的第一个正数
  • 什么才是真正的白盒测试?
  • 专题三_二分_x 的平方根
  • JavaScript 解析 Modbus 响应数据的实现方法
  • 记录处理:Caused by: java.lang.UnsatisfiedLinkError
  • MARCONet++ 攻克中文文本图像超分难题
  • 疯狂星期四文案网第40天运营日记
  • Web 开发 15
  • Transformer实战(11)——从零开始构建GPT模型
  • required a bean of type ‘com.example.dao.StudentDao‘ that could not be found
  • (Arxiv-2025)Stand-In:一种轻量化、即插即用的身份控制方法用于视频生成
  • All Document Reader:一站式文档阅读解决方案
  • LT6911GXD,HD-DVI2.1/DP1.4a/Type-C 转 Dual-port MIPI/LVDS with Audio 带音频
  • 【C++】缺省参数
  • Vue3中的ref与reactive全面解析:如何正确选择响应式声明方式
  • 采购招标周期从2月缩至3周?8Manage招标系统实战案例分享
  • 社区物业HCommunity本地部署二开与使用
  • 我的学习认知、高效方法与知识积累笔记
  • JAVA 关键字
  • Redis 官方提供免费的 30 MB 云数据库
  • 【机器人】人形机器人“百机大战”:2025年产业革命的烽火与技术前沿
  • Linux线程——基于生产者消费者模型的线程同步互斥应用
  • Scikit-learn (sklearn) 库详细介绍
  • 体彩排列三第2025217期号码分析
  • 蓝牙AOA定位技术在医疗行业的创新应用与发展
  • Linux 系统中~网络配置
  • 项目篇------------网页五子棋(知识预备)