当前位置: 首页 > 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 类型的全局变量&…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...