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;我们经常使用 …