Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】
文章目录
- Matplotlib绘制炫酷柱状图的艺术与技巧
- 1. 簇状柱状图
- 2. 堆积柱状图
- 3. 横向柱状图
- 4. 百分比柱状图
- 5. 3D柱状图
- 6. 堆积横向柱状图
- 7. 多系列百分比柱状图
- 8. 3D堆积柱状图
- 9. 带有误差线的柱状图
- 10. 分组百分比柱状图
- 11. 水平堆积柱状图
- 12. 多面板柱状图
- 13. 自定义颜色和样式
- 总结
Matplotlib绘制炫酷柱状图的艺术与技巧
当今数据可视化领域,Matplotlib是Python中最为流行的绘图库之一。它提供了丰富的功能和灵活的选项,使得用户能够创建各种类型的图表。本文将介绍Matplotlib库中绘制不同种类炫酷柱状图的技术,包括簇状柱状图、堆积柱状图、横向柱状图、百分比柱状图以及3D柱状图。
1. 簇状柱状图
簇状柱状图是将多个柱状图并列在同一组,方便比较不同类别之间的数据。下面是一个简单的代码示例:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [6, 8, 10]bar_width = 0.35
index = np.arange(len(categories))plt.bar(index, values1, bar_width, label='Group 1')
plt.bar(index + bar_width, values2, bar_width, label='Group 2')plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Clustered Bar Chart')
plt.xticks(index + bar_width / 2, categories)
plt.legend()
plt.show()
2. 堆积柱状图
堆积柱状图用于展示总体和各组成部分之间的关系。以下是一个堆积柱状图的代码示例:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [3, 6, 8]plt.bar(categories, values1, label='Group 1')
plt.bar(categories, values2, bottom=values1, label='Group 2')plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Stacked Bar Chart')
plt.legend()
plt.show()
3. 横向柱状图
横向柱状图在一些情境下更适合,可以通过barh
函数实现:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values = [5, 7, 9]plt.barh(categories, values)plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Horizontal Bar Chart')
plt.show()
4. 百分比柱状图
百分比柱状图可以通过将每个值除以总和来实现。以下是一个简单的例子:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values = [20, 30, 50]total = sum(values)
percentages = [(value / total) * 100 for value in values]plt.bar(categories, percentages)plt.xlabel('Categories')
plt.ylabel('Percentage')
plt.title('Percentage Bar Chart')
plt.show()
5. 3D柱状图
Matplotlib还支持绘制3D柱状图,可以通过bar3d
函数实现:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values = [5, 7, 9]fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')xpos = np.arange(len(categories))
ypos = [1] * len(categories)ax.bar3d(xpos, ypos, np.zeros(len(categories)), 0.8, 0.8, values)ax.set_xlabel('Categories')
ax.set_ylabel('Y')
ax.set_zlabel('Values')
ax.set_title('3D Bar Chart')
plt.show()
以上是一些Matplotlib库中绘制不同种类炫酷柱状图的基本技术。通过灵活运用这些技术,你可以根据实际需求创建更加丰富多彩的柱状图表。
6. 堆积横向柱状图
堆积横向柱状图同样可以通过barh
函数实现,不过需要调整参数来实现堆积效果:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [3, 6, 8]plt.barh(categories, values1, label='Group 1')
plt.barh(categories, values2, left=values1, label='Group 2')plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Stacked Horizontal Bar Chart')
plt.legend()
plt.show()
7. 多系列百分比柱状图
当需要比较多个系列的百分比时,可以将每个系列的百分比进行堆积展示:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [20, 30, 50]
values2 = [10, 40, 50]total1 = sum(values1)
total2 = sum(values2)
percentages1 = [(value / total1) * 100 for value in values1]
percentages2 = [(value / total2) * 100 for value in values2]plt.bar(categories, percentages1, label='Group 1')
plt.bar(categories, percentages2, bottom=percentages1, label='Group 2')plt.xlabel('Categories')
plt.ylabel('Percentage')
plt.title('Stacked Percentage Bar Chart')
plt.legend()
plt.show()
8. 3D堆积柱状图
Matplotlib的3D绘图工具同样支持堆积效果,可以通过调整参数来实现:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [3, 6, 8]fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')xpos = np.arange(len(categories))
ypos = [1] * len(categories)ax.bar3d(xpos, ypos, np.zeros(len(categories)), 0.8, 0.8, values1, label='Group 1')
ax.bar3d(xpos, ypos, np.zeros(len(categories)), 0.8, 0.8, values2, bottom=values1, label='Group 2')ax.set_xlabel('Categories')
ax.set_ylabel('Y')
ax.set_zlabel('Values')
ax.set_title('3D Stacked Bar Chart')
ax.legend()
plt.show()
以上代码示例展示了如何使用Matplotlib库绘制不同种类炫酷柱状图。通过这些例子,你可以灵活运用Matplotlib的强大功能,根据实际需求绘制出多样化的柱状图表。希望这些例子能够帮助你更好地理解和使用Matplotlib库。
9. 带有误差线的柱状图
有时候,为了更全面地呈现数据,我们需要在柱状图上添加误差线。以下是一个带有误差线的简单示例:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values = [5, 7, 9]
errors = [0.5, 0.8, 0.2]plt.bar(categories, values, yerr=errors, capsize=5, label='Values with Error')plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart with Error Bars')
plt.legend()
plt.show()
10. 分组百分比柱状图
有时候需要比较不同组的百分比,可以通过调整宽度和位置实现分组效果:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values_group1 = [20, 30, 50]
values_group2 = [15, 25, 60]total_group1 = sum(values_group1)
total_group2 = sum(values_group2)
percentages_group1 = [(value / total_group1) * 100 for value in values_group1]
percentages_group2 = [(value / total_group2) * 100 for value in values_group2]bar_width = 0.35
index = np.arange(len(categories))plt.bar(index, percentages_group1, bar_width, label='Group 1')
plt.bar(index + bar_width, percentages_group2, bar_width, label='Group 2')plt.xlabel('Categories')
plt.ylabel('Percentage')
plt.title('Grouped Percentage Bar Chart')
plt.xticks(index + bar_width / 2, categories)
plt.legend()
plt.show()
11. 水平堆积柱状图
水平堆积柱状图可以通过调整参数实现。以下是一个简单的水平堆积柱状图的代码示例:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [3, 6, 8]plt.barh(categories, values1, label='Group 1')
plt.barh(categories, values2, left=values1, label='Group 2')plt.xlabel('Values')
plt.ylabel('Categories')
plt.title('Horizontal Stacked Bar Chart')
plt.legend()
plt.show()
12. 多面板柱状图
如果你希望在同一图中展示多个柱状图,并对它们进行比较,可以使用多面板柱状图。以下是一个简单的例子:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values1 = [5, 7, 9]
values2 = [3, 6, 8]fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))ax1.bar(categories, values1, label='Group 1')
ax1.bar(categories, values2, bottom=values1, label='Group 2')
ax1.set_title('Grouped Bar Chart')ax2.barh(categories, values1, label='Group 1')
ax2.barh(categories, values2, left=values1, label='Group 2')
ax2.set_title('Grouped Horizontal Bar Chart')plt.legend()
plt.show()
13. 自定义颜色和样式
你可以通过传递颜色参数来自定义柱状图的颜色。此外,你还可以设置柱体的样式,例如边框宽度、边框颜色等。以下是一个简单的例子:
import matplotlib.pyplot as plt
import numpy as npcategories = ['Category A', 'Category B', 'Category C']
values = [5, 7, 9]plt.bar(categories, values, color=['blue', 'orange', 'green'], edgecolor='black', linewidth=2)plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Customized Bar Chart')
plt.show()
总结
在本文中,我们深入探讨了使用Matplotlib库绘制各种炫酷柱状图的技术。从基本的簇状柱状图、堆积柱状图、横向柱状图、百分比柱状图,到更高级的3D柱状图、水平堆积柱状图、多面板柱状图等,提供了多个实用的代码示例。
通过这些示例,读者可以学到如何使用Matplotlib库的不同函数和参数来绘制不同类型的柱状图。我们还介绍了一些自定义技巧,包括添加误差线、调整颜色和样式,以及绘制多面板柱状图等。
总体而言,Matplotlib是一个功能强大的数据可视化工具,通过掌握其中的技术,用户可以根据实际需求创造出更具表现力和可读性的图表。希望本文的代码示例能够帮助读者更好地理解和应用Matplotlib库,提高数据可视化的效果。如果读者有其他问题,建议查阅Matplotlib官方文档或向相关社区寻求帮助。
相关文章:

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】
文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…...
window 挂载linux 网盘
背景:因为很多情况下,作为开发人员,我们都希望用Linux的编译环境,但是可以用windows下各种IDE来写code; linux 服务器安装NFS服务 说明:NFS 服务就是让不同的计算机可以在不同的操作系统之间共享文件,采用的就是服务端/客户端的架构,在NFS服务器上将目录设置为输出目录(…...

windows10忘记密码的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

进程和线程的区别详解
🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 进程 进程在系统中是如何管理的 进一步认识PCB 线程 能否一直增加线程数目来提高效率 进程和线程…...

(基于xml配置Aop)学习Spring的第十五天
一 . Spring Aop编程简介 再详细点 , 如下 二 . 基于xml配置Aop 解决proxy相关问题 解决问题开始用xml配置AOP 导入pom坐标 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</vers…...
Centos7环境安装PHP8
一、安装必要的模块 yum install -y bzip2-devel libcurl-devel libxml2-devel sqlite-devel oniguruma oniguruma-devel libxml2 libxml2-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel zstd libzstd-devel curl libcurl-devel libpng libpng-devel …...

No matching client found for package name ‘com.unity3d.player‘
2024年2月5日更新 必须使用Unity方式接入Unity项目!一句话解决所有问题。(真的别玩Android方式) 大致这问题出现原因是我在Unity采用了Android方式接入Firebase,而Android接入实际上和Unity接入方式有配置上的不一样,我…...

JavaWeb之HTML-CSS --黑马笔记
什么是HTML ? 标记语言:由标签构成的语言。 注意:HTML标签都是预定义好的,HTML代码直接在浏览器中运行,HTML标签由浏览器解析。 什么是CSS ? 开发工具 VS Code --安装文档和安装包都在网盘中 链接:https://p…...

logback日志配置
springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…...

SpringBoot集成Flowable工作流
文章目录 一、了解Flowable1. 什么是Flowable2. Flowable基本流程3. Flowable主要几张表介绍 二、SpringBoot集成Flowable1. 在idea中安装Flowable插件2. SpringBoot集成Flowable3. SpringBoot集成Flowable前端页面 三、创建流程模版(以请假为例) 提示:以下是本篇文…...
try-with-resources 语法详解
目录 一、介绍 二、用法对比 三、优势 四、原理分析 一、介绍 在Java 7中,引入了一项重要的语法糖——try-with-resources,这项特性的目的是为了更有效地处理资源的管理。资源指的是需要在代码执行完毕后手动关闭的对象,比如文件流、网络…...

【Java程序设计】【C00207】基于(JavaWeb+SSM)的宠物领养管理系统(论文+PPT)
基于(JavaWebSSM)的宠物领养管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物领养系统 本系统分为前台系统、管理员、收养者和寄养者4个功能模块。 前台系统:游客打开系统…...

2024-2-4-复习作业
源代码: #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data;struct Node *next;struct Node *prev; }*DoubleLinkList;DoubleLinkList create() {DoubleLinkList s(DoubleLinkList)malloc(sizeof(st…...

【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
前言 大家好吖,欢迎来到 YY 滴Linux 系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...

【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
盘点本年度探索对外服务的百万请求量的API网关设计实现 背景介绍高性能API网关API网关架构优化多级缓存架构设计多级缓存富客户端漏斗模型数据读取架构 异步刷新过期缓存网关异步化调用模型高性能批量API调用(减少对于网关的交互和通信)并行调用和请求合…...

Python算法题集_环形链表
Python算法题集_环形链表 题234:环形链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【集合检索】2) 改进版一【字典检测】3) 改进版二【双指针】 4. 最优算法 本文为Python算法题集之一的代码示例 题234:环形链表 …...

【51单片机】开发板&开发软件(Keil5&STC-ISP)简介&下载安装破译传送门(1)
前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...
#vu3# element plus表格的序号字段
在表格中添加序号字段,可以使用以下几种方式来实现 1. 利用索引 在<el-table>组件的<el-table-column>中使用插槽来显示序号。示例: <el-table :data"tableData"><el-table-column label"序号" type"i…...

华为配置OSPF与BFD联动示例
配置OSPF与BFD联动示例 组网图形 图1 配置OSPF与BFD联动组网图 OSPF与BFD联动简介配置注意事项组网需求配置思路操作步骤配置文件 OSPF与BFD联动简介 双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测…...

Git 常用命令详解及如何在IDEA中操作
文章目录 前言发现宝藏一、初识Git1.Git概述2. Git的功能3. Git运行图示 二、Git下载安装三、Git 代码托管服务1.常用的 Git 代码托管服务2.使用码云代码托管服务 四、Git 常用命令1.Git 全局设置2.获取Git 仓库3.工作区、暂存区、版本库 概念4.Git 工作区中文件的两种状态5.本…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...