【Python可视化系列】一文教会你绘制美观的柱状图(理论+源码)

一、前言

    前面我详细介绍了如何绘制漂亮的折线图:

    【Python可视化系列】一文彻底教会你绘制美观的折线图(理论+源码)

    本篇文章将教你绘制美观的柱状图。柱状图(Bar Chart)是一种常用的统计图表,用于展示不同类别或组之间的比较。它通过使用矩形的长度来表示数据的大小或数量。

    在柱状图中,每个类别或组通常在水平轴(X轴)上被表示为独立的条形,而数据的值则在垂直轴(Y轴)上表示。条形的高度对应于数据的数值大小,从而可以直观地比较不同类别或组之间的差异。

    绘制柱状图的工具和库有很多,例如Python中的Matplotlib、Seaborn和Plotly等。这些库提供了丰富的函数和方法,使得绘制柱状图变得简单而灵活。

    持续更新可视化的一些方法,关注我,不错过!本文将详细解读绘制柱状图的要点!

plt.bar()参数详解

plt.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
x → 为一个标量序列,确定x轴刻度数目
height → 确定y轴的刻度
width → 单个直方图的宽度
bottom → 设置y边界坐标轴起点
color → 设置直方图颜色(只给出一个值表示全部使用该颜色,若赋值颜色列表则会逐一染色,若给出颜色列表数目少于直方图数目则会循环利用)

其他的一些参数:
align:柱状图的中心位置,默认"center"居中,可设置为"lege"边缘;
edgecolor:边框颜色;
linewidth:边框宽度;
tick_label:下标标签;
log:柱状图y周使用科学计算方法,bool类型;
orientation:柱状图是竖直还是水平,竖直:“vertical”,水平条:“horizontal”;

二、基本柱状图

import matplotlib.pyplot as plt
import seaborn as sns

# 设置绘图风格
# 法1:
# sns.set(style='darkgrid', font_scale=1.2)
# 法2:
plt.style.use('seaborn-darkgrid')

# 设置字体,中文为SimSun,英文为Times New Roman
# 法1:
plt.rcParams['font.family'] = 'Times New Roman, SimSun'
# 法2:
# font1 = {'family': 'Times New Roman, SimSun'}
# plt.rc('font', **font1)

# 法3:
# config = {
#     "font.family": 'Times New Roman, SimSun', # 衬线字体
#     "font.size": 12, # 相当于小四大小
#     "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
#     'axes.unicode_minus': False # 处理负号,即-号
# }
# plt.rcParams.update(config)

# 数据
x = ['A', 'B', 'C', 'D']
y = [10, 20, 15, 25]

# 绘制柱状图
plt.bar(x, y)

# 添加标题和标签
plt.title('柱状图示例',fontsize=16)
plt.xlabel('类别',fontsize=16)
plt.ylabel('数值',fontsize=16)

# 显示图形
plt.show()

效果如下:

图片

三、同一个x轴位置绘制多个柱状图

from matplotlib import pyplot as plt
import numpy as np

# 参数设置
plt.style.use('seaborn-darkgrid')
plt.rcParams['font.family'] = 'Times New Roman, SimSun'

# 数据
countries = ['挪威', '德国', '中国', '美国', '瑞典']
gold_medal = [16, 12, 9, 8, 8]
silver_medal = [8, 10, 4, 10, 5]
bronze_medal = [13, 5, 2, 7, 5]

# 将横坐标国家先替换为数值
x = np.arange(len(countries))
width = 0.2
gold_x = x
silver_x = x + width
bronze_x = x + 2 * width

# 绘图
plt.bar(gold_x, gold_medal, width=width, color='gold', label='金牌')
plt.bar(silver_x,silver_medal,width=width,color="silver",label="银牌")
plt.bar(bronze_x,bronze_medal,width=width, color="saddlebrown",label="铜牌")

#将横坐标数值转换为国家
plt.xticks(x + width, labels=countries)

#显示柱状图的高度文本
for i in range(len(countries)):
    plt.text(gold_x[i],gold_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
    plt.text(silver_x[i],silver_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)
    plt.text(bronze_x[i],bronze_medal[i], gold_medal[i],va="bottom",ha="center",fontsize=8)

#显示图例
plt.legend(loc="upper right") 
plt.show()

同一个x轴绘制多个柱状图重点在于需要设置x这个参数,即确定好x轴刻度的位置,效果如下:

图片

四、叠堆柱状图

from matplotlib import pyplot as plt
import numpy as np

# 参数设置
plt.style.use('seaborn-darkgrid')
plt.rcParams['font.family'] = 'Times New Roman, SimSun'

# 数据
countries = ['挪威', '德国', '中国', '美国', '瑞典']
gold_medal = np.array([16, 12, 9, 8, 8])
silver_medal = np.array([8, 10, 4, 10, 5])
bronze_medal = np.array([13, 5, 2, 7, 5])
width = 0.3

#绘图
plt.bar(countries, gold_medal, color='gold', label='金牌',bottom=silver_medal + bronze_medal,width=width)
plt.bar(countries, silver_medal, color='silver', label='银牌', bottom=bronze_medal,width=width)
plt.bar(countries, bronze_medal, color='#A0522D', label='铜牌',width=width)

#设置y轴标签,图例和文本值
plt.ylabel('奖牌数')
plt.legend(loc='upper right')
for i in range(len(countries)):
    max_y = bronze_medal[i]+silver_medal[i]+gold_medal[i]
    plt.text(countries[i], max_y, max_y, va="bottom", ha="center")

plt.show()

堆叠柱状图重点在于设置bottom这个参数,效果如下:

图片

好了,本篇内容就到这里,需要源码的小伙伴可以关注我

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 代理 MySQL 连接,并限制可访问IP

1.前言 我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。 好巧不巧,线上业务遇到b…

自动化测试(一)配置selenium环境(带图文,防止踩坑)

目录 配置selenium环境 1. 安装setuptools 2. 安装selenium 3. 安装驱动 如何查看谷歌浏览器版本 上一章讲述了如何安装python环境,那么,这一章讲述的是,如何配置自动化测试(selenium)环境~吧🤷‍♀️…

设计模式详解---抽象工厂模式

继续前言,工厂模式中抽象工厂模式的讲解: 1. 前面的工厂模式有啥问题? 前面的工厂模式有这么个问题:一个产品就给了一个工厂,这样子如果产品变多,系统就会很复杂: 2. 解决方法 我们可以按照手…

前端js实现将异步封装成promise然后用async await转同步

(一)需求背景: 哈喽 大家好啊,今天遇到一个问题,需要将异步请求转换成同步 (二)相关代码: function getInfo() {return new Promise((resolve,reject)> {setTimeout(()> {re…

vue_域名部署无法访问后端

前言 目前部署的比较另类,因为服务器为windows,目前还不是很会nginx,所以现在就只能在服务器上安装nodejs,然后直接使用npm run dev命令行的方式运行项目 遇到的坑 使用ip访问前端的时候,就可以访问,但是…

排序之归并排序

归并排序是第一个可以被实际使用的排序算法。归并排序性能不错,其复杂度为O(nlogn)。 归并排序是一种分治算法。其思想是将原始数组切分成较小的数组,直到每个小数组只有一 个位置,接着将小数组归并成较大的数组,直到最后只有一个…

获取Java类路径

利用System.getProperty(“java.class.path”)可以获取Java类路径(Java class path)。 package com.thb;import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {System.out.println(System.getP…

pycharm在终端处删除连接过的服务器

目录 操作 操作 打开设置处的SSH配置进行删除

宝塔面板快速搭建本地网站结合内网穿透实现远程访问【无需公网IP】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

Python+Yolov8+onnx-deepsort方法物体人流量识别统计

程序示例精选 PythonYolov8onnx-deepsort方法物体人流量识别统计 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonYolov8onnx-deepsort方法物体人流量识别统计》编写代码,…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景: 采坑之路: 1.修改https为http,问题还在 2.修改为淘宝镜像,问题还在 3.修改为官网地址,问题还在 4.升级node和npm,问题还在 5.猜想网络问题,问题解决 采坑总结&#xff1a…

【EI会议征稿】第三届计算机、人工智能与控制工程国际学术会议

The 3rd International Conference on Computer, Artificial Intelligence and Control Engineering (CAICE 2024) 第三届计算机、人工智能与控制工程国际学术会议 第三届计算机、人工智能与控制工程国际学术会议(CAICE 2024)将于2024年1月26-28日在西…

批量解压imagenet1k数据集中的zip文件

导言: 最近在处理imagenet1k数据集时,面对大量的zip包,手动一个一个解压显然不是明智的选择。作为程序员,我们可以采用批量解压的方法来提高效率,下面就是解决这一问题的方法和原因分析。 问题背景: image…

软件测试用例经典方法 | 单元测试法案例

单元测试又称模块测试,是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验,检查程序在语法、格式和逻辑上的错误,并验证程序是否符合规范,以发现单元内部可能存在的各种缺陷。 单元测试的对象是软件设计的最…

ESXI 6.7升级update3

一、适用场景 1、企业已有专业服务器,通过虚拟化环境搭建了vm server; 2、备份整个vm server时,需要使用ovftool工具完成,直接导出ovf模板时报错; 3、升级EXSI6.7的build 8169922版本为update 3版本后,已保…

无脑利用API实现文心一言AI对话功能?(附代码)

前言:在当今数字化的时代,人工智能(AI)技术正在不断演进,为开发者提供了丰富的工具和资源。其中,API(应用程序接口)成为构建强大AI应用的关键组成部分之一。本文将介绍如何利用API来…

P21 卷积神经网络CNN

卷积 参数共享 Maxpool 逐步限制 neuron的弹性, 感受野限制看的范围,参数共享限制参数 由于上述限制,CNN的bias 比较大,用在图像中,影响不大。 如果用在其他方面,要注意一下。 pooling的目的是降低计算…

如何在手机上设置每年农历日期的生日提醒?

生日是一个比较特殊的节日,很多人都会在生日的时候,被自己的亲朋好友送祝福和礼物,同理我们也要在亲朋好友生日的时候,为他们送上祝福和礼物,这时候如果忘记对方的生日就比较影响关系了。而有不少小伙伴都表示自己平时…

基于深度学习yolov5钢材瑕疵目标检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介简介YOLOv5钢材瑕疵目标检测系统特性1. 数据预处理2. 模型架构3. 训练策略4. 后处理 性能评估 二、功能三、系统四. 总结 一项目简介 # YOLOv5 钢材瑕疵目标…

数据结构-07-二叉树

前面学习的栈、队列等等都是线性表结构。树是一种非线性表结构,比线性表的数据结构要复杂。 1-树tree “树”这种数据结构类似我们现实生活中的“树”,这里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子…