Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】

news2024/11/26 22:24:44

文章目录

  • 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 np

categories = ['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()

image-20240204235223077

2. 堆积柱状图

堆积柱状图用于展示总体和各组成部分之间的关系。以下是一个堆积柱状图的代码示例:

import matplotlib.pyplot as plt
import numpy as np

categories = ['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 np

categories = ['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 np

categories = ['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 np

categories = ['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库中绘制不同种类炫酷柱状图的基本技术。通过灵活运用这些技术,你可以根据实际需求创建更加丰富多彩的柱状图表。

image-20240204235253825

6. 堆积横向柱状图

堆积横向柱状图同样可以通过barh函数实现,不过需要调整参数来实现堆积效果:

import matplotlib.pyplot as plt
import numpy as np

categories = ['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 np

categories = ['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 np

categories = ['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 np

categories = ['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()

image-20240204235319700

10. 分组百分比柱状图

有时候需要比较不同组的百分比,可以通过调整宽度和位置实现分组效果:

import matplotlib.pyplot as plt
import numpy as np

categories = ['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 np

categories = ['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 np

categories = ['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 np

categories = ['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()

image-20240204235338404

总结

在本文中,我们深入探讨了使用Matplotlib库绘制各种炫酷柱状图的技术。从基本的簇状柱状图、堆积柱状图、横向柱状图、百分比柱状图,到更高级的3D柱状图、水平堆积柱状图、多面板柱状图等,提供了多个实用的代码示例。

通过这些示例,读者可以学到如何使用Matplotlib库的不同函数和参数来绘制不同类型的柱状图。我们还介绍了一些自定义技巧,包括添加误差线、调整颜色和样式,以及绘制多面板柱状图等。

总体而言,Matplotlib是一个功能强大的数据可视化工具,通过掌握其中的技术,用户可以根据实际需求创造出更具表现力和可读性的图表。希望本文的代码示例能够帮助读者更好地理解和应用Matplotlib库,提高数据可视化的效果。如果读者有其他问题,建议查阅Matplotlib官方文档或向相关社区寻求帮助。

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

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

相关文章

STC系列单片机的中断系统

目录 一、中断系统的定义 二、STC15系列单片机的中断请求源及结构图 三、中断查询表以及触发方式 四、在keil c中如何声明中断函数 五、外部中断 六、基于STC15芯片实战中断系统的使用 (1)外部中断2/外部中断3来检测门的开关状态 (2&a…

Centos 内存和硬盘占用情况以及top作用

目录 只查看内存使用情况: 内存使用排序取前5个: 硬盘占用情况 定位占用空间最大目录 top查看cpu及内存使用信息 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

RK3399平台开发系列讲解(内存篇)进程内存详解

🚀返回专栏总目录 文章目录 一、虚拟地址映射的物理内存1.1、物理内存1.2、虚拟内存1.2.1、用户态:低特权运行程序1.2.2、内核态:运行的程序需要访问操作系统内核数据二、PageCache三、指标查询命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢进程消耗的内存包…

车载充电器(OBC)氮化镓(GaN)驱动(高压高功率)设计(第四篇)

上图来自于网络 1、GaN FET概念 GaN FET,全称为Gallium Nitride Field-Effect Transistor(氮化镓场效应晶体管),是一种采用氮化镓(Gallium Nitride, GaN)材料制作的新型功率半导体器件。相较于传统的硅基…

『运维备忘录』之 Cron 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

Vue学习笔记之组件基础

1、组件的定义 一般将 Vue 组件定义在一个单独的 .vue 文件中,称做单文件组件;当然也可以将组件直接定义在js文件中,如下js代码,定义一个组件BlogPost,通过props定义对外暴露属性title,父组件传递title&am…

MySQL 小技巧:xtrabackup 软件包的下载及安装

案例:xtrabackup 软件包的下载及安装 软件包下载:Index of /percona/centos/7/RPMS/x86_64/ CentOS7 默认的数据库版本比较老,因此建议使用 xtrabackup 2.4 版本 // CentOS7 默认的数据库版本比较老,因此建议使用 xtrabackup 2.4 版本 // 安装 CentOS7 默…

【算法与数据结构】647、516、LeetCode回文子串+最长回文子序列

文章目录 一、647、回文子串二、516、最长回文子序列三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、647、回文子串 思路分析:判断一个字符串是否为回文串那么必须确定回文串的所在区间,而一维…

安卓平台valgrind交叉编译

背景 通过上次的文章valgrind跨平台调试及其问题分析,为同事们在大部分平台下进行内存问题分析提供了帮助。但是也遇到了阻塞情况:android 平台,无法交叉编译通过。大家对于编译这件事,似乎天然有一种排斥,本能的拒绝&#xff0c…

全网最详细解法|同济大学|高等数学|第八版|习题1-2

文章目录 同济大学|高等数学|第八版|习题1-2|2.1同济大学|高等数学|第八版|习题1-2|2.2同济大学|高等数学|第八版|习题1-2|2.3同济大学…

[Android] 240204批量生成联系人,短信,通话记录的APK

平常在做测试的时候,需要批量生成很多测试数据; 陌生人 联系人名字的生成支持随机生成,也可以自定义生成,自定义生成陌生人的数据,联系人的名字是否带索引; 通话记录 随机生成通话记录,在生…

Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1

目录 【问题描述】maven环境报错 Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1 【解决办法】 检查maven路径是否一致 路径一致的话&#xff0c;更改配置文件settings.xml的镜像源。 添加代码到 <mirrors> <!-- 阿里镜像 --> &l…

LLaMA 模型中的Transformer架构变化

目录 1. 前置层归一化&#xff08;Pre-normalization&#xff09; 2. RMSNorm 归一化函数 3. SwiGLU 激活函数 4. 旋转位置嵌入&#xff08;RoPE&#xff09; 5. 注意力机制优化 6. Group Query Attention 7. 模型规模和训练超参数 8. 分布式模型训练 前置归一化与后置…

如何使用第三方API采集电商数据呢?

电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时&#xff0c;人工效率偏低&#xff0c;且工作内容有限。 特别是眼下“618&#xff0c;双十一&#xff0c;双十二&#xff0c;年底大促”将至&#xff0c;如何提高运营的效率和质量、保证产品及服务的良…

单片机的50个电路

单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD1602电路 数码管 max485 红外开关 译码器 移位寄存器 步进电机控制 复位电路 下载电路 …

普渡机器人CEO预测2024年服务机器人市场将扩大

原创 | 文 BFT机器人 根据普渡科技有限公司的报告&#xff0c;商用服务机器人在东亚地区的应用比其他地方更为广泛。然而&#xff0c;预计到2024年&#xff0c;全球其他地区也将迎头赶上。这家总部位于中国深圳的公司自豪地宣称&#xff0c;它已经成为中国最大的此类机器人出口…

SpringCloud + Nacos环境下抽取Feign独立模块并支持MultipartFile

文章目录 一、前提条件和背景1. 前提2. 背景 二、Feign模块1. 依赖引入2. application.yaml配置3. 扩展支持MultipartFile4. 将media-api注册到feign 三、Media模块四、Content模块1. 引入依赖2. 启用FeignClient3. 测试 五、需要澄清的几点 一、前提条件和背景 1. 前提 已经…

JQL语法及Python查询 Jira issue信息

文章目录 一、JQL语法1.1 JQL语法简介1.2 Jira中常用的JQL搜索语句 二、查询issue信息2.1 安装JIRA依赖库2.2 登录JIRA2.3 查询JIRA的project信息2.4 查询JIRA的issue信息2.5 搜索Jira issue 一、JQL语法 1.1 JQL语法简介 JIRA 的 JQL 语法由以下几个元素组成&#xff1a; f…

docker-compose部署laravel项目实战(主机nginx连接项目容器)(详细配置过程)

我用的是主机上的nginx,没有用docker安装nginx&#xff0c; 所以需要先在主机上安装nginx # 更新系统yum sudo yum update# 安装安装包sudo yum install epel-release sudo yum install wget# 安装Nginx sudo yum install nginx #启动 sudo systemctl start nginx #开机自启动…

leetcode (算法)66.加一(python版)

需求 给定一个由 整数 组成的 非空 数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1&#xff1a; 输入&#xff1a;digi…