当前位置: 首页 > news >正文

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

效果图如下所示:
在这里插入图片描述
就是这个样子,一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下:

  • 利用ax.twinx()这个函数生成一个新的x轴(相当于复制了一个x轴)
  • 使用ax.invert_yaxis()这个函数反转新x轴对应的y轴,使其从图中左边0-100排列变成100-0排列,这样就保证了图片从顶往底显示的效果
  • 手动设置新的y轴的ticklabel,使其展现为0-100排列。

具体步骤如下所示:

1、首先是生成随机一组数据并绘制柱形图:


import numpy as np
import matplotlib.ticker as mticker
import matplotlib.pyplot as plt
###########################################################################
plt.rcParams['font.sans-serif']=['SimHei']#中文 
plt.rcParams['axes.unicode_minus']=False  #显示负号
# ####################################data#################################
n=6
y  = np.linspace(10,70,n)
y1 = np.linspace(10,60,n)
y2 = np.linspace(10,50,n)
x=np.linspace(2000,2020,n)data = np.array([y,y1,y2])
width = 0.6
# ####################################draw#################################
fig=plt.figure(figsize=(5,7),dpi=500)#添加画布等
ax=fig.add_axes([0,0,1,0.3])
ax.set(xlim=(2000,2021),ylim=(0,100)) 
bar1=ax.bar(x - width,data[0],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
bar2=ax.bar(x + width,data[1],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
bar3=ax.bar(x ,data[2],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
##########################################################################
ax.set(xlim=(1999,2021),ylim=(0,100))   #设置x、y轴的最大最小范围
ax.set_xticks(np.linspace(2000, 2020, n)) #设置x轴显示的标签         #添加注释
ax.axhline(y=0,c='k',ls=':',lw=1)    #添加水平线,设置颜色,位置,水平线的style
#设置轴的参数,间隔
ax.tick_params(axis='both',which='both',direction='in')
ax.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(mticker.MultipleLocator(5))
# 设置label
ax.set_xlabel('年份 (Year)')
ax.set_ylabel('数值 (%) ')
ax.set_title('柱状图',fontsize=10)

在这里插入图片描述

2、复制一个新的x轴,并生成一组数据绘制柱形图

ax2 = ax.twinx()
ax2.set(xlim=(1999,2021),ylim=(100)) 
bar4 = ax2.bar(x,np.linspace(4,6,n),width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01  , #柱形离底部的距离color='r')
ax2.yaxis.set_minor_locator(mticker.MultipleLocator(5))

在这里插入图片描述

3、翻转y轴,稍微调整一下tick的方向

ax2.invert_yaxis()
ax2.tick_params(axis='both',tickdir='in')
ax2.tick_params(which='minor',tickdir='in')

在这里插入图片描述

4、 重新定义ticklabel的值

ax2.set_yticklabels(['0','20','40','60','80','100'][::-1])

在这里插入图片描述

以下是全部的代码:

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 21 14:49:36 2023@author: jianpu@blog :  https://blog.csdn.net/weixin_44237337?spm=1000.2115.3001.5343@email: 211311040008@hhu.edu.cnintroduction : keep learning althongh walk slowly
"""import numpy as np
import matplotlib.ticker as mticker
import matplotlib.pyplot as plt
###########################################################################
plt.rcParams['font.sans-serif']=['SimHei']#中文 
plt.rcParams['axes.unicode_minus']=False  #显示负号
# ####################################data#################################
n=6
y  = np.linspace(10,70,n)
y1 = np.linspace(10,60,n)
y2 = np.linspace(10,50,n)
x=np.linspace(2000,2020,n)data = np.array([y,y1,y2])
width = 0.6
# ####################################draw#################################
fig=plt.figure(figsize=(5,7),dpi=500)#添加画布等
ax=fig.add_axes([0,0,1,0.3])
ax.set(xlim=(2000,2021),ylim=(0,100)) 
bar1=ax.bar(x - width,data[0],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
bar2=ax.bar(x + width,data[1],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
bar3=ax.bar(x ,data[2],# color=np.where(y>0,'r','b'), #判断大于0的为红色,负的为蓝色width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01   #柱形离底部的距离)
##########################################################################
ax.set(xlim=(1999,2021),ylim=(0,100))   #设置x、y轴的最大最小范围
ax.set_xticks(np.linspace(2000, 2020, n)) #设置x轴显示的标签         #添加注释
ax.axhline(y=0,c='k',ls=':',lw=1)    #添加水平线,设置颜色,位置,水平线的style
#设置轴的参数,间隔
ax.tick_params(axis='both',which='both',direction='in')
ax.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax.xaxis.set_minor_locator(mticker.MultipleLocator(5))
# 设置label
ax.set_xlabel('年份 (Year)')
ax.set_ylabel('数值 (%) ')
ax.set_title('柱状图',fontsize=10)#添加图例
ax2 = ax.twinx()
ax2.invert_yaxis()
ax2.set(xlim=(1999,2021),ylim=(100)) 
ax2.set_yticklabels(['0','20','40','60','80','100'][::-1])
bar4 = ax2.bar(x,np.linspace(4,6,n),width=0.5,   #柱形宽度align='center', #柱形的位置edge/center alpha=0.8,    #柱形透明度hatch='*',    #柱形表明的形状样式edgecolor='k',#柱形边缘颜色bottom=0.01  , #柱形离底部的距离color='r')
ax2.yaxis.set_minor_locator(mticker.MultipleLocator(5))
ax2.tick_params(axis='both',tickdir='in')
ax2.tick_params(which='minor',tickdir='in')
ax.legend([bar1,bar2,bar3,bar4],['柱形1','柱形2','柱形3','柱形4'])
plt.show()

具体代码是按照之前的一个教程修改的:绘制正负区分的柱形图[ax.bar()]

				欢迎评论或者加我交流,分享更简单的绘制方法~

相关文章:

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()] 效果图如下所示: 就是这个样子,一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下: 利用ax.twinx()这个函数生成一个新的x轴…...

自定义Task工具,调用系统的IdleHandler方法

1、工具类&#xff0c;调用系统的IdleHandler方法package com.abbi.viewdemo;import android.os.Looper;import android.os.MessageQueue;import java.util.LinkedList;import java.util.Queue;public class DelayTaskDispatcher {private Queue<Task> delayTasks new L…...

生态GEP案例分享

浙江省领导参观德清”两山“平台4月30日上午&#xff0c;浙江省政府参事室一行领导&#xff0c;在德清县副县长陪同下考察当地数据智能运营中心&#xff0c;参观了国内首个县域数字“两山”决策支持平台建设成果。国内生产总值(GDP)&#xff0c;是指按国家市场价格计算的一个国…...

企业级信息系统开发学习笔记1.5 初探Spring AOP

文章目录零、本讲学习目标一、Spring AOP&#xff08;一&#xff09;AOP基本含义&#xff08;二&#xff09;AOP基本作用&#xff08;三&#xff09;AOP与OOP对比&#xff08;四&#xff09;AOP使用方式&#xff08;五&#xff09;AOP基本概念二、提出游吟诗人唱赞歌任务&#…...

Mysql数据库主主从设置

注意&#xff1a;在同一台服务器上部署主从或主主之类的时候&#xff0c;数据库data下有一个auto.cnf里的uuid不能重复。 原则&#xff1a;做同步之前要保证两个数据库数据一致. 锁表操作&#xff1a; FLUSH TABLES WITH READ LOCK; 注&#xff1a;没有锁定主服务器&#xf…...

监管持续,医疗卫生机构如何守好“涉疫”数据安全?

肆虐三年的新冠疫情&#xff0c;影响着全球经济发展、社会正常运行&#xff0c;也成为网络攻击、勒索软件攻击快速增长的温床&#xff0c;“滋生”了一系列网络、数据安全问题&#xff0c;受到各界关注。最近&#xff0c;上线运行三年的 “粤康码”发布公告、官宣部分服务下线&…...

STM32开发(13)----获取唯一设备标识符UID

获取唯一设备标识符UID前言一、什么事UID二、实验过程1.CubeMx配置2.代码实现3.实验结果总结前言 这一章节介绍如何获取STM32芯片中的唯一的ID号的两种方法。 一、什么事UID 在许多项目中&#xff0c;识别设备是必要的。从简单的设备描述到更复杂的设备&#xff0c;如 USB 串…...

华为OD机试 - 最优调度策略(Python) | 机试题+算法思路+考点+代码解析 【2023】

最优调度策略 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度 会得到不同系统消耗的性能 假设由 N 个待串行用户,每个用户可以使用 A/B/C 三种不同的调度策略 不同的策略会消耗不同的系统资源 请你根据如下规则进行用户调度 并返回总的消耗资源数 规则是:相…...

前端零基础入门-002-集成开发环境

本篇目标 了解市面上常用的前端集成开发环境&#xff08;ide&#xff09;掌握 HBuiberX 的使用&#xff1a;下载安装&#xff0c;新建项目、网页、运行网页。 内容摘要 本篇介绍了市面上流行的几款前端集成开发环境&#xff08;ide&#xff09;&#xff0c;并介绍了 Hbuilde…...

su和sudo的区别

linux中 su和sudo的区别 su和sudo是两个常用的切换到root超级用户命令。功能上类似&#xff0c;但使用上还是有不少差异。 su命令 su是切换到root用户的命令&#xff0c;主要用法如下&#xff1a; su&#xff1a;不带参数直接输入su将切换到root用户&#xff0c;需要输入root…...

【ChatGPT】使用ChatGPT进行51单片机程序编程体验

背景 最近ChatGPT大火&#xff0c;笔者尝试使用它进行了51单片机编程尝试。ChatGPT是一种由OpenAI训练的大型语言模型&#xff0c;具有强大的自然语言处理能力和生成代码的能力。 使用ChatGPT进行51单片机编程&#xff0c;笔者发现它可以帮助开发人员快速生成符合要求的代码&a…...

Docker之路(1.Docker概述、组成以及特点)

1.docker为什么会出现&#xff1f; 一款产品或者项目来说&#xff0c;一般有三个环境&#xff0c;日常/测试环境、预发环境、正式/线上环境 这么多环境&#xff0c;对其环境的配置是十分麻烦的&#xff0c;每一个机器都要部署环境&#xff0c;有的会有集群Redis、Hadoop等&…...

非对称加密算法在android的应用

前言android 系统安全内容总结 4、非对称加密算法应用 主要特性包括secure boot、AVB、OTA包签名、apk签名、apex、ko签名; 除此外上层应用keystore服务、涉及TEEOS非对称算法的功能安全会用到。属于功能安全本章节暂不描述。 4.1、secboot+avb secboot+avb属于安全启动参照…...

51单片机——定时器中断实验,小白讲解,相互学习

定时器介绍 1&#xff0c;CPU时序的有关知识 震荡周期&#xff1a;为单片机提供定时信号的震荡源的周期&#xff08;晶振周期或外加震荡周期&#xff09;。状态周期&#xff1a;2个震荡周期为1个状态周期&#xff0c;用S表示。震荡周期又称S周期或时钟周期。机器周期&#xff…...

什么是循环依赖,spring是如何去解决循环依赖问题的?什么是三级缓存?【spring】

文章目录什么是循环依赖&#xff1f;什么是三级缓存&#xff1f;执行流程什么是循环依赖&#xff1f; 在我们的开发中&#xff0c;会不可避免的遇到Bean之间循环依赖的&#xff0c;所谓循环依赖&#xff0c;就是两个或者两个以上的Bean互相持有对方&#xff0c;这样在程序运行…...

Cron表达式

网上搜一下就有在线生成网站&#xff0c;很方便。 比如&#xff1a;Cron表达式生成器 用途 定时调度任务&#xff0c;比如说服务器、云函数中定时执行脚本函数。 Cron 表达式构成 Cron 表达式是字符串&#xff0c;一般由 6 - 7 个字段构成&#xff0c;空格分隔。每个字段代…...

JavaScript 作用域

作用域是可访问变量的集合。在JavaScript中&#xff0c;能够定义全局作用域或者局部作用域。在 JavaScript 中, 对象和函数同样也是变量。在 JavaScript 中, 作用域为可访问变量&#xff0c;对象&#xff0c;函数的集合。JavaScript 函数作用域: 作用域在函数内修改。JavaScrip…...

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下&#xff0c;新建两个txt文件 2.在hadoop的web端递归创建一个目录&#xff0c;存储这两个文件 3.查看web端的文件 一、内部表&#xff1a; 1.创建一个内部表&#xff0c;并指定内部表的存储位置 2.查看内部表&#xff0c;内部表中没有数据 …...

Java流程控制

目录 前言 一、用户交互Scanner及其进阶使用 输入的数据为字符串类型 输入的数据为整型或者浮点型 练习 二、顺序结构 三、选择结构 if单选泽结构 if双选择结构 if多选择结构 嵌套的if结构 switch多选择结构 四、循环结构 while循环 Do...while循环 For循环 练习 利用for循环…...

I.MX6ULL_Linux_系统篇(17) uboot分析-启动linux

bootz 启动 Linux 内核 images 全局变量 不管是 bootz 还是 bootm 命令&#xff0c;在启动 Linux 内核的时候都会用到一个重要的全局变量&#xff1a;images&#xff0c; images 在文件 cmd/bootm.c 中有如下定义&#xff1a; images 是 bootm_headers_t 类型的全局变量&…...

解锁3大智能功能:League-Toolkit让普通玩家也能玩转专业级游戏分析

解锁3大智能功能&#xff1a;League-Toolkit让普通玩家也能玩转专业级游戏分析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在英雄联盟的召…...

【个人推荐】一些好用的录音转写工具

因为助教课备课的缘故&#xff0c;需要录制讲座的音频以整理知识点。一次讲座的音频内容很长&#xff0c;即使3x速快进播放依然很耗费时间&#xff0c;因此录音转写的需求浮现了出来。于是闲暇之余探索了下市面上的录音转写工具&#xff0c;浅浅记录下体验。 下面主要推荐三款…...

Zotero Connector进阶:定制知乎内容抓取与快照/正文模式切换详解

1. 为什么需要定制知乎内容抓取&#xff1f; 作为一款强大的文献管理工具&#xff0c;Zotero在学术论文管理方面表现出色&#xff0c;但在处理知乎这类内容平台时却常常力不从心。我最初使用Zotero Connector抓取知乎内容时&#xff0c;经常遇到只保存了网页快照而无法获取完整…...

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践

EasyAnimateV5-7b-zh-InP在AI艺术创作中的算法优化实践 1. 引言 作为一名数字艺术创作者&#xff0c;我一直在寻找能够提升创作效率和质量的技术工具。最近在尝试使用EasyAnimateV5-7b-zh-InP进行艺术创作时&#xff0c;发现这个模型在图像到视频的转换方面表现出色&#xff…...

BilibiliDown:如何高效批量下载B站视频并实现离线收藏管理?

BilibiliDown&#xff1a;如何高效批量下载B站视频并实现离线收藏管理&#xff1f; 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.…...

Visual C++运行库一键修复终极指南:快速解决系统依赖问题

Visual C运行库一键修复终极指南&#xff1a;快速解决系统依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统中不可或缺的组件…...

MAVLink垂直扩展:Emaxx导航板专用协议库设计与实践

1. 项目概述 mavlink_emaxx 是一个面向 Emaxx 导航板&#xff08;Emaxx Nav Board&#xff09;定制的 MAVLink 协议消息扩展库。该库并非独立协议栈&#xff0c;而是基于标准 MAVLink v2 协议规范构建的一组专用消息定义&#xff08;message definitions&#xff09;与配套 C…...

高效媒体下载全平台解决方案:跨平台资源获取工具深度指南

高效媒体下载全平台解决方案&#xff1a;跨平台资源获取工具深度指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

CentOS7下KingbaseES V9与MySQL性能对比实测:从安装到查询优化的全流程体验

CentOS7下KingbaseES V9与MySQL性能对比实测&#xff1a;从安装到查询优化的全流程体验 在国产数据库技术快速发展的今天&#xff0c;越来越多的企业开始关注从传统数据库向国产化解决方案的迁移。作为国产数据库中的佼佼者&#xff0c;KingbaseES V9凭借其出色的MySQL兼容性和…...

90% 的开发者都在错误理解 async/await:协程本质与高并发实战指南

90% 的开发者都在错误理解 async/await&#xff1a;协程本质与高并发实战指南 很多人在第一次写 async def await 的时候&#xff0c;心里都暗暗期待&#xff1a;这下代码应该变快了吧&#xff1f; 结果写完一测&#xff0c;单个接口的响应时间和以前同步写法几乎一模一样&…...