数据可视化 —— 柱形图应用(大全)

一、案例一:单柱形图

1.导入库

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

2.给窗口名称和画布大小

plt.figure(num='单柱形图', figsize=(6, 4), facecolor='w')

3.定义x、y轴的数据

# range(0-4)
x = np.arange(5)
# 创建数组
y1 = np.array([10, 8, 7, 11, 13])
y2 = np.array([9, 6, 5, 10, 12])

4.添加样式

# 柱形图的宽度
bar_width = 0.3
plt.title('5个月平均温度柱形图', fontsize=15)
plt.ylabel('温度(度)', color='k', fontsize=12)

5.修改x标签

plt.xticks(x, ['1月', '2月', '3月', '4月', '5月'], color='k', fontsize=12)

6.画图

plt.bar(x, y1, width=bar_width)

7.添加数据数值

# 头标
for a, b in zip(x, y1):plt.text(a, b, '%d' % b, ha='center')

8.添加图例

plt.legend(('5个月平均温度', '各个月平均温度', '测试'), shadow=True, fancybox=True)

9.显示窗口

plt.show()

二、案例二:多柱形图(学生成绩)

# 导入用于绘图的matplotlib.pyplot库,在后续代码中可以使用plt这个别名来调用该库中的绘图函数,
# 例如plt.figure()用于创建图形窗口,plt.bar()用于绘制柱形图等
import matplotlib.pyplot as plt# 导入用于科学计算的numpy库,它提供了高效的多维数组对象和各种数学函数,
# 例如np.arange()用于生成等差数列,方便后续设置x轴刻度位置
import numpy as np# 创建一个新的图形窗口,通过num参数设置窗口的标题为'多柱形图',
# 方便用户识别当前打开的图形窗口对应的图表内容;
# figsize参数用于设置图形窗口的大小,这里设置宽为12英寸,高为7英寸,
# 可以根据实际需求调整图形的大小;
# facecolor参数用于设置图形窗口的背景颜色,'w'代表白色,使得图形窗口背景为白色
plt.figure(num='多柱形图', figsize=(12, 7), facecolor='w')# 由于matplotlib默认字体可能不支持中文显示,通过设置plt.rcParams['font.sans-serif']为'KaiTi',
# 将matplotlib使用的字体修改为楷体,这样在图表中显示中文标题、标签等内容时就不会出现乱码问题
plt.rcParams['font.sans-serif'] = 'KaiTi'# 使用numpy的arange函数生成一个从0到4的整数数组,
# 这个数组将用于表示x轴上的刻度位置,后续绘制柱形图时会根据这些位置来确定柱子的横坐标
x = np.arange(5)# 初始化一个空列表y,这个列表将用于存储不同科目的成绩数据,
# 每个元素是一个包含5个学生该科目成绩的列表
y = []
# 向列表y中添加语文成绩数据,列表中的每个元素对应一个学生的语文成绩
y.append([100, 80, 70, 15, 77])
# 向列表y中添加数学成绩数据,同样每个元素对应一个学生的数学成绩
y.append([91, 64, 50, 100, 55])
# 向列表y中添加英语成绩数据,每个元素对应一个学生的英语成绩
y.append([13, 14, 93, 95, 77])# 设置每个柱形图的宽度为0.2,这个宽度值会影响柱子在图表中的显示宽度,
# 需要根据实际情况调整,避免柱子之间重叠或者间隔过大
bar_width = 0.2# 使用plt.title函数为图表添加标题,标题内容为'学生成绩柱形图',
# fontsize参数设置标题的字体大小为20,使得标题更加醒目;
# color参数设置标题的颜色为黑色('k'代表黑色),增强标题的可读性
plt.title('学生成绩柱形图', fontsize=20, color='k')
# 使用plt.xlabel函数为x轴添加标签,标签内容为'姓名',
# 表明x轴代表的是不同学生的姓名;
# fontsize参数设置标签的字体大小为15,让标签清晰可见
plt.xlabel('姓名', fontsize=15)
# 使用plt.ylabel函数为y轴添加标签,标签内容为'成绩(分)',
# 表明y轴代表的是学生的成绩,单位是分;
# fontsize参数设置标签的字体大小为15,方便用户识别
plt.ylabel('成绩(分)', fontsize=15)# 使用plt.ylim函数设置y轴的显示范围,从0到100分,
# 这样可以确保图表中只显示0到100分这个区间内的成绩,使图表更加聚焦于有效数据
plt.ylim(0, 100)# 使用plt.xticks函数移动x轴刻度标签的位置,
# x + bar_width将刻度标签的位置向右移动bar_width的距离,
# 使得刻度标签位于每个柱子组的中间位置;
# 同时设置x轴刻度标签为学生的姓名,依次为'小红'、'小明'、'小爱'、'小雪'、'小白',
# 方便用户对应每个柱子代表的学生
plt.xticks(x + bar_width, ['小红', '小明', '小爱', '小雪', '小白'])# 使用for循环遍历不同科目的成绩数据,len(y)表示成绩数据列表y的长度,也就是科目的数量
for i in range(len(y)):# 使用plt.bar函数绘制每个科目的柱形图,# x + i * bar_width表示每个柱子的x轴位置,根据i的值进行偏移,# 确保不同科目的柱子依次排列,不会重叠;# y[i]表示当前科目的成绩数据,即每个学生在该科目上的成绩;# width=bar_width设置柱子的宽度为之前定义的bar_widthplt.bar(x + i * bar_width, y[i], width=bar_width)# 为每个柱子添加数据标签,使用zip函数将每个柱子的x轴位置和对应的成绩组合成元组,# 方便后续在每个柱子顶部添加成绩数值for a, b in zip(x + i * bar_width, y[i]):# 使用plt.text函数在每个柱子的顶部添加成绩数值,# a表示标签的x轴位置,b表示标签的y轴位置,即柱子的顶部;# '%d' % b将成绩数值转换为整数格式的字符串作为标签内容;# ha='center'设置标签在柱子顶部居中显示,使图表更加美观plt.text(a, b, '%d' % b, ha='center')# 使用plt.legend函数为图表添加图例,
# 图例中的标签分别为'语文成绩'、'数学成绩'、'英语成绩',
# 对应不同颜色的柱子代表的科目;
# shadow=True为图例添加阴影效果,增强图例的立体感;
# fancybox=True让图例的边框呈现圆角效果,使图例更加美观
plt.legend(['语文成绩', '数学成绩', '英语成绩'], shadow=True, fancybox=True)# 使用plt.show函数显示绘制好的图表,将图形窗口展示给用户
plt.show()

三、案例三:3个分店的销售额

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npplt.figure(num='多柱形图', figsize=(14, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'# 使用pandas的read_excel函数读取指定路径的Excel文件,
# 这里文件名为'2022年某店铺3个分店销售额.xlsx',并将读取的数据存储在DataFrame对象df中
df = pd.read_excel('2022年某店铺3个分店销售额.xlsx')# 使用numpy的arange函数生成一个从0到指定长度的整数数组,
# 这里指定长度为DataFrame中'月份'列的元素数量,该数组将作为后续图表x轴的刻度位置
x = np.arange(len(df['月份']))# 初始化一个空列表y,用于存储不同分店的销售额数据
y = []
# 将DataFrame中'第一分店'列的数据添加到列表y中,代表第一分店各月的销售额
y.append(df['第一分店'])
# 将DataFrame中'第二分店'列的数据添加到列表y中,代表第二分店各月的销售额
y.append(df['第二分店'])
# 将DataFrame中'第三分店'列的数据添加到列表y中,代表第三分店各月的销售额
y.append(df['第三分店'])# 设置每个柱形图的宽度为0.2,这个宽度会影响柱形图在图表中的显示效果,
# 需要根据数据量和图表大小进行调整,避免柱子之间过于拥挤或过于稀疏
bar_width = 0.2# 设置图表的标题为'2022年某店铺3个分店销售额',并将标题字体大小设置为20,
# 使标题更加醒目,方便用户快速了解图表的主题
plt.title('2022年某店铺3个分店销售额', fontsize=20)# 设置图表x轴的标签为'月份',表明x轴代表的是不同的月份
plt.xlabel('月份')# 设置图表y轴的标签为'销售额(万元)',表明y轴代表的是各分店的销售额,单位为万元,
# 同时将标签字体大小设置为15,使标签更加清晰
plt.ylabel('销售额(万元)', fontsize=15)# 设置y轴的显示范围,从0到40,即只显示销售额在0到40万元之间的数据,
# 这样可以使图表聚焦于这个范围内的数据,避免显示无关的数值
plt.ylim(0, 40)# 设置x轴的刻度标签位置和内容,将刻度标签的位置向右移动bar_width的距离,
# 使刻度标签位于每组柱子的中间位置,刻度标签内容为DataFrame中'月份'列的数据
plt.xticks(x + bar_width, df['月份'])# 使用for循环遍历不同分店的销售额数据,len(y)表示列表y的长度,即分店的数量
for i in range(len(y)):# 绘制每个分店的柱形图,x + i * bar_width确定柱子的x轴位置,# 不同分店的柱子会依次排列,不会重叠;y[i]是该分店各月的销售额数据;# width=bar_width设置柱子的宽度为之前定义的宽度plt.bar(x + i * bar_width, y[i], width=bar_width)# 为每个柱子添加数据标签,使用zip函数将柱子的x轴位置和对应的销售额组合成元组,# 方便后续在每个柱子顶部添加销售额数值for a, b in zip(x + i * bar_width, y[i]):# 在每个柱子的顶部添加销售额数值,a是标签的x轴位置,b是标签的y轴位置,# '%.2f' % b将销售额数值格式化为保留两位小数的字符串,ha='center'使标签在柱子顶部居中显示plt.text(a, b, '%.2f' % b, ha='center')# 绘制平均参考线,计算三个分店销售额的平均值,
# 先分别计算每个分店销售额的平均值,再将这三个平均值相加并除以3得到总的平均值
# linestyle='-'设置参考线的样式为实线,color='r'设置参考线的颜色为红色
plt.axhline(y=(sum(y[0]) / len(y[0]) + sum(y[1]) / len(y[1]) + sum(y[2]) / len(y[2])) / 3,linestyle='-',color='r')# 为图表添加图例,图例中的标签依次为'平均工资'(此处可能有误,应为'平均销售额')、
# '第一分店'、'第二分店'、'第三分店',shadow=True为图例添加阴影效果,
# fancybox=True使图例的边框呈现圆角效果,增强图例的美观性
plt.legend(['平均工资', '第一分店', '第二分店', '第三分店'], shadow=True, fancybox=True)# 将绘制好的图表保存为图片文件,文件名为'2022年3个分店销售额柱形图',
# 保存的图片格式会根据文件名的后缀自动确定,默认是PNG格式
plt.savefig('2022年3个分店销售额柱形图')# 显示绘制好的图表,将图形窗口展示给用户
plt.show()

四、案例四:各班级学生成绩

import matplotlib.pyplot as plt
import pandas as pd
import numpy as npplt.figure(num='多柱形图', figsize=(12, 6), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'df = pd.read_excel('全校高二年级各班男女生英语成绩评估.xlsx')
x = np.arange(len(df['班级名称']))y = df['平均成绩(男生)']
y2 = df['平均成绩(女生)']# 这里定义了误差棒的高度,预留的功能
# error = [1000, 200, 150, 100, 100, 500, 1000, 880]bar_width = 0.3
plt.title('全校高二年级各班男女生英语成绩评估', fontsize=20)plt.ylabel('平均成绩', fontsize=15)plt.ylim(0, 120)
plt.xticks(x + 0.15, df['班级名称'])# 使用 zip 函数将 x 轴位置、男生平均成绩和女生平均成绩组合成元组,
# 然后遍历这些元组,为每个班级的男女生平均成绩柱子添加数据标签
for a, b, c in zip(x, df['平均成绩(男生)'], df['平均成绩(女生)']):plt.text(a, b / 2, '%.1f' % b, ha='center', va='center')plt.text(a + bar_width, c / 2, '%.1f' % c, ha='center', va='center')plt.bar(x, y, width=bar_width)
plt.bar(x + bar_width, y2, width=bar_width)
plt.legend(['平均成绩(男生)', '平均成绩(女生)'], shadow=True, fancybox=True)plt.savefig('全校高二年级各班男女生英语成绩评估(柱形图).png')plt.show()

五、案例五:不同产品各季度销售额

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as ms# 设置主题风格
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='多柱形图', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('不同产品各季度的销售额.xlsx')
x = np.arange(len(df['季度']))
y = []
y.append(df['产品A'])
y.append(df['产品B'])
y.append(df['产品C'])# fontfamily:设置字体,fontstretch:斜体
plt.title('不同产品各季度的销售额', fontsize=20, fontfamily='SimHei', fontstyle='italic')
plt.ylabel('销售额(元)',fontsize=14,fontweight='book')
plt.ylim(0, 9000)
plt.xticks(x + 0.2, df['季度'],fontstyle='italic', rotation=-60)bar_width = 0.2for i in range(len(y)):# 画柱形plt.bar(x + i * bar_width, y[i], width=bar_width)# 写标签for a, b in zip(x + i * bar_width, y[i]):plt.text(a, b + 200, '%d' % b, ha='center')plt.legend(['产品A', '产品B', '产品C', ], shadow=True, fancybox=True)
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apijson 快速上手

apijson是强大的工具,简化了CRUD的操作,只要有数据库表,就能自动生成RESTFUL接口。但初次上手也是摸索了很长时间,尤其是部署与使用上,这里尝试以初学者角度来说下: 一、好处 1、对于简单的应用&#xff…

V4L2杂谈

V4L2的开发手册 在做v4l2的开发的时候, 可以使用v4l2-ctl命令协助调试和软件开发。关于linux多媒体开发可以参考链接:https://www.linuxtv.org/wiki/index.php/Main_Page关于v4l2的api接口开发可以参考:https://linuxtv.org/docs.php在linux…

(五)深入了解AVFoundation-播放:多音轨、字幕、倍速播放与横竖屏切换

引言 在之前的博客中,我们已经实现了一个相对完整的播放器,具备了基本功能,如播放、暂停、播放进度显示和拖拽快进等。这为我们提供了一个坚实的基础。接下来,我们将进一步扩展播放器的功能,使其更具灵活性和实用性&a…

3ds Max 2016的版本怎么处理 按键输入被主程序截断 C#winform窗体接受不到英文输入

3ds Max 2016的版本怎么处理 按键输入被主程序截断 C#winform窗体接受不到英文输入 如果窗体失去焦点应该取消 全局监听事件 解决方案:在窗体失去焦点时取消全局键盘钩子 为了确保 WinForms 窗体失去焦点时不再拦截键盘事件(避免影响 3ds Max 或其他程…

华为手机或平板与电脑实现文件共享

1.手机或平板与电脑在同一个网络 2.打开手机或平板端,设置---更多连接----快分享或华为分享打开此功能-----开启共享至电脑 3.打开电脑,网络中就可看到手机端分享的用户名称 4. 登陆就可访问手机 5.常见问题 5.1 电脑未发现本机 5.2 修改了访问密码后再…

elemenPlus中,如何去掉el-input中 文本域 textarea自带的边框和角标

1、去掉角标 :deep(.el-textarea__inner) {resize: none !important; // 去除右下角图标 }2、去除边框&#xff0c;并自定义背景色 <el-inputref"textareaRef"v-model"tempContent":style"{--el-border-color: rgba(255,255,255,0.0),--el-input-…

xv6-labs-2024 lab2

lab-2 0. 前置 课程记录 操作系统的隔离性&#xff0c;举例说明就是&#xff0c;当我们的shell&#xff0c;或者qq挂掉了&#xff0c;我们不希望因为他&#xff0c;去影响其他的进程&#xff0c;所以在不同的应用程序之间&#xff0c;需要有隔离性&#xff0c;并且&#xff0…

MCU控制4G模组(标准AT命令),CatM的最大速率?

根据3GPP标准&#xff0c;Cat M1的上行峰值速率大约是1 Mbps&#xff0c;下行大约是1 Mbps。但实际速率会受到多种因素影响&#xff0c;比如网络条件、信号强度、模块配置等。 考虑使用AT命令时的开销。每次发送数据都需要通过AT命令&#xff0c;比如ATQISEND&#xff0c;会引…

JavaScript(JS进阶)

目录 00闭包 01函数进阶 02解构赋值 03通过forEach方法遍历数组 04深入对象 05内置构造函数 06原型 00闭包 <!-- 闭包 --><html><body><script>// 定义&#xff1a;闭包内层函数&#xff08;匿名函数&#xff09;外层函数的变量&#xff08;s&…

6.1es新特性解构赋值

解构赋值是 ES6&#xff08;ECMAScript 2015&#xff09;引入的语法&#xff0c;通过模式匹配从数组或对象中提取值并赋值给变量。&#xff1a; 功能实现 数组解构&#xff1a;按位置匹配值&#xff0c;如 let [a, b] [1, 2]。对象解构&#xff1a;按属性名匹配值&#xff0c;…

SpringBoot美容院管理系统设计与实现

基于SpringBoot的美容院管理系统免费源码&#xff0c;帮助您快速搭建高效、智能的美容院管理平台。该系统涵盖了管理员、技师、前台、普通用户及会员五大功能模块&#xff0c;以下是系统的核心功能与部署方式详细介绍。 ​功能模块 ​管理员功能 ​美容部位管理&#xff1a;支…

记一次某网络安全比赛三阶段webserver应急响应解题过程

0X01 任务说明 0X02 靶机介绍 Webserver&#xff08;Web服务器&#xff09;是一种软件或硬件设备&#xff0c;用于接收、处理并响应来自客户端&#xff08;如浏览器&#xff09;的HTTP请求&#xff0c;提供网页、图片、视频等静态或动态内容&#xff0c;是互联网基础设施的核心…

ChatGPT 4:引领 AI 创作新时代

文章目录 前言一、ChatGPT 4 的技术革新二、AI 文案创作&#xff1a;精准生成与个性化定制三、AI 绘画艺术&#xff1a;从文字到图像的神奇转化四、AI 视频制作&#xff1a;自动化剪辑与创意实现五、知识库与 ChatGPT 4 的深度融合六、全新的变革和机遇七、相关书籍推荐《ChatG…

HTTP请求-请求行

请求行&#xff08;方法&#xff0c;URL&#xff0c;版本号&#xff09; 方法&#xff1a; 描述了这次请求的目的。 常见方法&#xff1a; GET&#xff1a;从服务器拿一个东西过来&#xff08;读操作&#xff09; POST&#xff1a;往服务器放一个东西去&#xff08;写操作…

OSPF不规则区域和LSA

OSPF不规则区域 1.远离骨干的非骨干区域 R1-R4四台路由器能够正常学习到彼此路由&#xff0c;但是R5不行&#xff0c;因为R5是非法ABR 解决方法&#xff1a; 1使用Tunnel隧道将AR4连接到骨干区域 &#xff08;1&#xff09; 使用隧道解决不规则区域的问题 a.可能造成选路不…

【VS Code】开发C++跳转配置

C配置c_cpp_properties.json {"env": {"myIncludePath": ["${workspaceFolder}/src/include","${workspaceFolder}/src","${workspaceFolder}","/home/xxx/include/"],"myDefines": ["RELEASE&qu…

Spring AI应用:利用DeepSeek+嵌入模型+Milvus向量数据库实现检索增强生成--RAG应用(超详细)

Spring AI应用&#xff1a;利用DeepSeek嵌入模型Milvus向量数据库实现检索增强生成–RAG应用&#xff08;超详细&#xff09; 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展为各行业带来了前所未有的机遇。其中&#xff0c;检索增强生成&…

Spring 的 IoC 和 DI 详解:从零开始理解与实践

Spring 的 IoC和 DI 详解&#xff1a;从零开始理解与实践 一、IoC&#xff08;控制反转&#xff09; 1、什么是 IoC&#xff1f; IoC 是一种设计思想&#xff0c;它的核心是将对象的创建和管理权从开发者手中转移到外部容器&#xff08;如 Spring 容器&#xff09;。通过这种…

JVM基础架构:内存模型×Class文件结构×核心原理剖析

&#x1f680;前言 “为什么你的Java程序总在半夜OOM崩溃&#xff1f;为什么某些代码性能突然下降&#xff1f;一切问题的答案都在JVM里&#xff01; 作为Java开发者&#xff0c;如果你&#xff1a; 对OutOfMemoryError束手无策看不懂GC日志里的神秘数字好奇.class文件如何变…

.DS_Store文件泄露、.git目录泄露、.svn目录泄露漏洞利用工具

&#x1f409;工具介绍 一款图形化的 .DS_Store文件泄露、.git目录泄露、.svn目录泄露漏洞利用工具。 &#x1f3af;使用 本工具使用Python3 PyQt5开发&#xff0c;在开始使用前&#xff0c;请确保已经安装了相关模块&#xff1a; pip3 install -r requirements.txt -i ht…