Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)

news2024/11/26 9:56:49

往期python绘图合集:
python绘制简单的折线图
python读取excel中数据并绘制多子图多组图在一张画布上
python绘制带误差棒的柱状图
python绘制多子图并单独显示
python读取excel数据并绘制多y轴图像
python绘制柱状图并美化|不同颜色填充柱子


文章目录

  • 准备数据
  • 一、绘制图表
  • 二、使用步骤
    • 1.引入库
    • 2.完整代码
  • 三、运行并修改


准备数据

提示:这里可以添加本文要记录的大概内容:

本文主要介绍如何使用Python中的matplotlib库绘制带误差棒的特别漂亮的三组柱状图。每个柱子一种渐变颜色,全局字体为新罗马,字体为蓝色,坐标轴字号新罗马,并设置数据显示在柱子上方中央。

首先,我们需要准备需要绘制的数据。在这里,我们使用numpy模块生成一些随机数据。下面是示例代码:

import numpy as np

# set seed for reproducibility
np.random.seed(12345)

n_groups = 4

# generate data for group 1
means_1 = np.random.randint(50, 100, n_groups)
stds_1 = np.random.randint(1, 5, n_groups)

# generate data for group 2
means_2 = np.random.randint(30, 80, n_groups)
stds_2 = np.random.randint(1, 5, n_groups)

# generate data for group 3
means_3 = np.random.randint(10, 60, n_groups)
stds_3 = np.random.randint(1, 5, n_groups)

首先使用numpy.random.seed()函数设置了随机数生成器的种子,以便于复现结果。然后,我们使用numpy.random.randint()函数生成了每组的4个数据和对应误差棒。


一、绘制图表

接下来就可以使用matplotlib库绘制带误差棒的三组柱状图

二、使用步骤

使用plt.rcParams[‘font.family’]和plt.rcParams[‘font.size’]函数设置全局字体和字号为新罗马和16号。接下来,我们使用cm.coolwarm、cm.PiYG和cm.YlGn函数分别获取三组颜色渐变,并使用np.linspace()函数将它们划分为4个区间。然后,我们分别用colors1、colors2和colors3变量保存了三组颜色。

接着,设置了柱状图的相关属性,包括柱宽、透明度和误差棒参数。然后,我们使用plt.subplots()函数创建一个包含图表和轴对象的Figure对象,并指定了图片大小。在图表上,首先创建了每个组的x轴刻度值index,然后使用ax.bar()函数绘制每个组的柱状图,每组柱子颜色采用不同的颜色渐变方案,并设置误差棒。最后,添加了标签、标题和图例,并设置了坐标轴字号为字体和字号。

最后,我们定义了函数autolabel(), 并分别对三组柱形图调用该函数,以便在每个柱子的顶部中央显示数据标签。该函数通过调用ax.text()函数实现。

1.引入库

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

2.完整代码

# -*- coding: utf-8 -*-
"""
Created on Sat May 13 13:08:36 2023

@author: ypzhao
"""


import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

# 设置全局字体和字号
font = {'family': 'Times New Roman', 'size': 18}
plt.rc('font', **font)

# 设置柱状图数据样本 
n_groups = 4
means_1 = (90, 55, 40, 65)
std_1 = (2, 3, 4, 1)

means_2 = (85, 62, 54, 20)
std_2 = (3, 5, 2, 3)

means_3 = (70, 45, 55, 30)
std_3 = (1, 2, 3, 4)

# 准备颜色渐变
cmap = plt.get_cmap('coolwarm')
colors_1 = [cmap(i) for i in np.linspace(0, 1, n_groups)]
cmap = plt.get_cmap('PiYG')
colors_2 = [cmap(i) for i in np.linspace(0, 1, n_groups)]
cmap = plt.get_cmap('YlGn')
colors_3 = [cmap(i) for i in np.linspace(0, 1, n_groups)]


# 绘制柱状图
fig, ax = plt.subplots(figsize=(8, 5),dpi=600)
index = np.arange(n_groups)
bar_width = 0.25

opacity = 0.8
error_config = {'ecolor': '0.3'}

rects1 = ax.bar(index, means_1, bar_width,capsize=3,
                alpha=opacity, color=colors_1,
                yerr=std_1, error_kw=error_config,
                label='pH1')

rects2 = ax.bar(index + bar_width, means_2, bar_width,capsize=3,
                alpha=opacity, color=colors_2,
                yerr=std_2, error_kw=error_config,
                label='pH2')

rects3 = ax.bar(index + 2*bar_width, means_3, bar_width,capsize=3,
                alpha=opacity, color=colors_3,
                yerr=std_3, error_kw=error_config,
                label='pH3')

# 添加数据标签(显示在柱子上方中央)
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x() + rect.get_width()/2., 1.05*height,
                '{:.0f}'.format(height),
                ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)
autolabel(rects3)

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)


# 添加标签、标题和图例
ax.set_xlabel('Group',font)
ax.set_ylabel('Scores',font)
ax.set_title('pH by day and error bar')
ax.set_xticks(index + bar_width)
ax.set_xticklabels(('10', '20', '30', '40'))
ax.legend(loc='best',ncol=3,frameon=False)

# 设置坐标轴字号为新罗马
for tick in ax.xaxis.get_minor_ticks():
    tick.label1.set_fontsize(16)
    tick.label1.set_fontname('Times New Roman')
    
for tick in ax.yaxis.get_minor_ticks():
    tick.label1.set_fontsize(16)
    tick.label1.set_fontname('Times New Roman')

plt.tight_layout()
plt.show()


三、运行并修改

运行代码后,将会显示出带误差棒的三组柱状图,每个柱子一种渐变颜色,全局字体为新罗马,字体为蓝色,坐标轴字号新罗马,并且数据显示在柱子上方中央。
在这里插入图片描述

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

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

相关文章

Android RecyclerView实现吸顶动态效果,附详细效果图

文章目录 一、ItemDecoration二、实现RecyclerView吸顶效果1、实现一个简单的RecyclerView2、通过ItemDecoration画分割线3、画出每个分组的组名4、实现吸顶效果 完整demo 链接:https://download.csdn.net/download/JasonXu94/87786702 一、ItemDecoration [外链图片转存失败…

SpringDataRedis

SpringDataRedis SpringDataRedis简介RedisTemplate对Redis操作类型SpringDataRedis快速入门1、引入spring-boot-starter-data-redis依赖2、在application.properties配置Redis信息3、注入RedisTemplate并测试 SpringDataRedis的序列化方式现象分析SpringDataRedis的序列化方式…

基于RK3588的以太网PHY的问题分析

环境:RK3588为荣品电子核心板,PHY为裕太微电子YT8521; 首先上电后识别不到以太网: 1.先怀疑驱动的问题,因为本方案中直接使用的是荣品电子官方的驱动; 对比原理图及驱动。涉及到一个配置问题。 基于时钟来源的不通,驱动程序可分为四种模式,PHY的时钟和TXCLK的时钟;…

北华大学第九届程序设计竞赛 题解

5.14和队友VP一场,第二次VP,状态明显比第一次好很多,总共A了7题,基本是能做出来的都做出来了,最后还剩下接近2小时的时间。。。。。 A "北华"有几何 思路:数图片中“北华”的数量,直…

双平台GraalVM编译二进制程序

本文示例均采用Java11,GraalVM目前无法支持跨平台编译,比如,我通过Linux直接编译Windows可执行的exe,是不行的。 因此,需要掌握两种平台的GraalVM的安装、使用。 一、背景 1.1 为何GraalVM快? 常规Java…

永恒之塔私服 2.0包楼纳斯达克 网游的诺曼底登陆-

二战末期的诺曼底登陆,至今让人历历在目。盟军自此在西欧展开大规模进攻,加速了纳粹德国的崩溃。从某种意义上说,诺曼底登陆是整个二战一次生死攸关的转折点。《永恒之塔2.0:进军龙界》登上纳斯达克,也是一场激荡人心的…

基于自动编码器VAE的声音生成之音频预处理模块preprocess pipeline的实现和代码讲解

文章目录 概述Preprocessline模块实现以及代码讲解Loader模块Padder模块LogSpectrogramExtractor模块MinMaxNormaliser模块Saver模块PreprocessPipeLine模块知识补充property修饰词 总结 概述 这部分是将原来基于mnist手写数据集生成模型,一个用到基于FSDD音频数据…

蓝桥:前端开发笔面必刷题——Day2 数组(二)

文章目录 📋前言🎯删除有序数组中的重复项📚题目内容✅解答 🎯移动零📚题目内容✅解答 🎯长度最小的子数组📚题目内容✅解答 🎯反转字符串数组📚题目内容✅解答 &#x1…

麒麟操作系统软件更新灾难连篇之二:QQ罢工

在解决了中文输入法消失的问题后,还没缓过气来,又发现QQ罢工了:双击电脑桌面上的QQ图标,没有显示QQ登录界面。 重启电脑再试,还是不显示QQ登录界面。 前不久腾讯正式宣布,QQ Linux 版 3.0 已在 QQ 官网上…

最好用的文本与文件查询软件AnyTXT Searcher与Listary简介

1. 工具简介 1.1 Listary简介 Listary是一个革命性的Windows搜索工具,借助 Listary软件,你可以快速搜索电脑文件、定位文件、执行智能命令、记录访问历史、快速切换目录、收藏常用项目等。 Listary为Windows传统低效的文件打开/保存对话框提供了便捷、…

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强,就算受伤,我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的…

makefile 学习(2):C语言的编译及库文件的生成与链接

文章目录 1. 介绍2. C语言编译2.1 预处理2.2 生成汇编语言2.3 编译目标文件2.4 编译为可执行文件 3. .a静态库的编译与链接案例 4 .so 动态库的编译与链接 1. 介绍 编译C语言的相关后缀 .a 文件是一个静态库文件.c文件是c语言的源文件.h c语言的头文件.i 是预处理文件.o 目标文…

两个用字符串表示的大数字的和

文章目录 题目详情Java实现分析Java 怎么获取到字符串中的对应位置的数字值Java完整代码测试验证 python实现python 怎么获取到字符串中的对应位置的数字值python完整代码 总结 这是遇到的一道快手数仓岗位的面试题目,题目大意如下: 题目详情 现在有两个…

【树莓派4B安装18.04桌面+远程SSH】

【树莓派4B安装18.04桌面远程SSH】 1. 前言2 .树莓派安装ubuntu18.04 系统2.1 下载ubuntu Server 18.04 的镜像包2.2 镜像烧录2.3 高级设置2.4 配置WiFi2.5 ssh文件配置2.6 Pi 4B启动文件 3. 安装finalshell3.1 windows版下载3.2 windows版安装3.3 SSH连接 4. 安装ubuntu桌面4.…

【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(寄存器)

文章目录 一、IOPORT简介二、IOPORT的框图分析三、IOPORT的寄存器描述1. 端口引脚功能选择寄存器2. 端口输出数据寄存器3. 端口输入数据寄存器4. 端口输出置位/复位寄存器5. 写保护寄存器 四、点亮LED灯(寄存器) 从本文开始,我将以瑞萨RA系列…

【夜莺(Flashcat)V6监控】3.链路追踪

链路追踪 介绍 链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机…

Java 把一个 List 转换为字符串

在本快速指南中,我们将会解释如何在 Java 把一个 List 转换为 String 字符串。 这个在某些特定的场合可能比较有用,比如说在控制台中输出 List 中的内容,转换为可以人为阅读的内容来进行调试。 使用 List 中标准的 toString() 方法 一个最简…

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢?解:这个芯片被称之为双向数据缓冲器这个芯片的作用,用来进行数据缓冲(提高驱…

【网络编程】详解UDP/TCP套接字的创建流程

目录 一、网络编程套接字 1、一些概念 1.1源IP地址和目的IP地址 1.2端口号port 1.3TCP和UDP的性质 1.4网络字节序、IP地址类型转换、数据接收与发送函数、popen函数 2、UDP套接字 2.1UDP服务器创建流程 2.2UDP客户端创建流程 2.3创建socket套接字 2.4绑定套接字对应…

快速找出PATH 路径下重复的命令程序文件

RT,就是想找出命名冲突的可执行文件。日积月累的,PATH 环境变量里乱七八糟堆了一堆东西,很可能想叫一个命令出来,结果实际执行的是另一个地方的程序。 Python 脚本 import ospath os.environ[PATH] folders path.split(;) fil…