Python——条形图正负不同色加表格

条形图,当差值大于0时设置一个颜色,反之另一种颜色,并添加表格 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import matplotlib.ticker as ticker#设置输出结果对齐方式
pd.set_option('display.unicode.ambiguous_as_wide',True)
pd.set_option('display.unicode.east_asian_width',True)# 解决plt中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falseimport warnings
warnings.filterwarnings("ignore")

数据 

data_merge=pd.DataFrame({'A':[87,79,80,92],'B':[93,89,67,77],'C':['张三','李四','王五','赵六']})
print(data_merge)

    A   B     C
0  87  93  张三
1  79  89  李四
2  80  67  王五
3  92  77  赵六

代码

data_merge['差值'] = data_merge['A'] - data_merge['B']
data_merge['百分比'] = (data_merge['A'] - data_merge['B'])/data_merge['B']
data_merge[['A', 'B', '差值']] = data_merge[['A', 'B', '差值']].astype('int')
data_merge['百分比画'] = data_merge['百分比'].map(lambda x: '{:.0%}'.format(x))
data_merge = data_merge.sort_values(by='百分比', ascending=False)
data_merge = data_merge[data_merge['B']!=0]
data_merge = data_merge.reset_index(drop=True)#画图数据
x_data = list(data_merge['C'])
y_data = list(data_merge['百分比'])#上升数据
yz = data_merge[data_merge['百分比']>0]
yz["百分比画"]= '▲' + yz["百分比画"]
x1 = list(yz['C']) 
y_data1 = list(yz['百分比'])
y1 = list(yz['百分比画'])
index1 = np.arange(len(y1))#下降数据
yf = data_merge[data_merge['百分比']<0]
yf["百分比画"]= '▼' + yf["百分比画"]
x2 = list(yf['C'])
y_data2 = list(yf['百分比'])
y2 = list(yf['百分比画'])
index2 = np.arange(len(y2))#不变数据
y_ = data_merge[data_merge['百分比']==0]
y_["百分比画"]= '-' + y_["百分比画"]
x3 = list(y_['C']) 
y_data3 = list(y_['百分比'])
y3 = list(y_['百分比画'])
index3 = np.arange(len(y3))#***********绘图***********
plt.figure(figsize=(10,5),dpi=300)
plt.ylim(data_merge['百分比'].min(),data_merge['百分比'].max()+0.05) #范围
plt.yticks([])  # 去y坐标刻度
plt.xticks([])  # 去x坐标刻度
plt.title('A与B',fontsize=25)  #标题#取消每一个的边框
ax1 = plt.subplot(1, 1, 1)
ax1.spines['right'].set_visible(False) #右边
ax1.spines['top'].set_visible(False) #上边
ax1.spines['left'].set_visible(False) #左边
ax1.spines['bottom'].set_visible(False) #下边
ax=plt.gca();#获得坐标轴的句柄
ax.spines['bottom'].set_linewidth(1);#设置底部坐标轴的粗细
plt.tick_params(labelsize=8) #x轴标签大小#判断大于0的为#e28b90,负的为#98b9e5
plt.bar(x_data, y_data, color=np.where(data_merge['百分比']>=0,'#e28b90','#98b9e5'),width=0.8) #上升数据标签     
for a,b,c in zip(index1,y_data1,y1):   #柱子上的数字显示plt.text(a*1.,b+0.001,c,ha='center',va='bottom',fontsize=8,color ='#c02c38');
for a,b,c in zip(index1,y_data1,x1):   #柱子上的标签显示plt.text(a*1.,b+0.02,c,ha='center',va='bottom',fontsize=8,color ='#c02c38');   #下降数据    
for a,b,c in zip(index2,y_data2,x2):   #柱子上的标签显示plt.text(a+len(index1)+len(index3),b-0.01,c,ha='center',va='bottom',fontsize=8); 
for a,b,c in zip(index2,y_data2,y2):   #柱子上的数字显示plt.text(a+len(index1)+len(index3),b-0.025,c,ha='center',va='bottom',fontsize=8);#不变数据
for a,b,c in zip(index3,y_data3,x3):   #柱子上的标签显示plt.text(a+len(index1),b+0.02,c,ha='center',va='bottom',fontsize=8); 
for a,b,c in zip(index3,y_data3,y3):   #柱子上的数字显示plt.text(a+len(index1),b,c,ha='center',va='bottom',fontsize=8);# 像饼图中添加表格
columns = x_data
rows = ['A', 'B', "差距","百分比"]
d = np.array([data_merge['A'],data_merge['B'],data_merge['差值'],data_merge['百分比画']])
table = plt.table(cellText=d, rowLabels=rows,colLabels=columns, cellLoc='center', loc="bottom",bbox=[0.04, -0.35, 0.92, 0.24])
# 调整表格的大小
table.auto_set_font_size(False)
table.set_fontsize(9)

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

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

相关文章

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0 下载qwt最新版本&#xff0c;用git工具 git clone下载源码 git clone https://git.code.sf.net/p/qwt/git qwt-git 或者使用我下载的 qwt 2.6.0 链接&#xff1a;https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwdpq1o 提取码&#xff1a;pq1o 下载…

python-基础篇-高级变量类型

文章目录 高级变量类型目标知识点回顾 01. 列表1.1 列表的定义1.2 列表常用操作del 关键字&#xff08;科普&#xff09;关键字、函数和方法&#xff08;科普&#xff09; 1.3 循环遍历1.4 **应用场景** 02. 元组2.1 元组的定义创建空元组元组中 **只包含一个元素** 时&#xf…

教您如何下载保存钉钉视频到电脑本地

教您如何下载保存钉钉视频到电脑和手机相册地瓜网络技术 大家好&#xff0c;我们这边是地瓜网络技术&#xff01;30秒教会你下载钉钉视频&#xff01;现在很多群管理员把视频设置为禁止下载&#xff0c;导致我们无法正常的下载群直播回放视频&#xff0c; 今天我们就教大家如何…

AWS 专题学习 P7 (FSx、SQS、SNS)

文章目录 Amazon FSx – 概述Amazon FSx for LustreFSx Lustre - 文件系统部署选项 Amazon FSx for NetApp ONTAPAmazon FSx for OpenZFSHybrid Cloud 存储AWS 存储云原生选项AWS 存储网关Amazon S3 File GatewayAmazon FSx File GatewayVolume GatewayTape GatewayStorage Gat…

【LeetCode】141. 环形链表

leetcode题目链接 141. 环形链表 #include <stdio.h> #include <stdbool.h>struct ListNode {int val;struct ListNode* next; }; typedef struct ListNode ListNode;bool hasCycle(ListNode* head) {ListNode* slow head, * fast head;while (fast &&…

微信小程序 image bindload 事件不触发,图片加载不出来

问题&#xff1a; 当小程序图片页面反复跳转时&#xff0c;或者微信打开小程序页面之后&#xff0c;处于后台运行。 图片加载不出来&#xff0c;我图片加载是通过bindload事件不判断是否下载完成再显示。但是现在bindload不触发&#xff0c;一直显示加载层。 分析&#xff1…

鸿蒙 HarmonyOS ArkTS ArkUI 动画 中心扩展、向下扩展、纵向扩展

EntryComponentstruct Index {State widthA: number 0State heightA: number 0onPageShow():void{animateTo ( {duration: 2000,iterations: -1,curve:Curve.Linear}, () > {this.widthA 200this.heightA 200} )}build() {Column() {// 中心扩展Column(){}.width(this.wi…

什么是中间件?

文章目录 为什么需要中间件&#xff1f;中间件生态漫谈数据库中间件读写分离分库分表引进数据库中间件MyCat 服务端代理模式ShardingJDBC 客户端代理模式 总结 IT 系统从单体应用逐渐向分布式架构演变&#xff0c;高并发、高可用、高性能、分布式等话题变得异常火热&#xff0c…

【Arduino】无法上传程序到开发板,报错 avrdude: ser_open(): can‘t set com-state for “\\.\COM6“

问题描述 在尝试将项目上传到Arduino板子时&#xff0c;尽管开发板已被正确连接&#xff0c;并且IDE中能够正常读取到开发板信息&#xff0c;但是上传过程中仍然出现了问题。 下面是IDE中显示的开发板信息&#xff1a; 当尝试上传程序时&#xff0c;控制台报错信息如下&#…

APP测试基本流程以及APP测试要点梳理,保证您看了不后悔!

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

拓展边界:前端世界的跨域挑战

目录 什么是跨域 概念 同源策略及限制内容 常见跨域场景 如何解决跨域 CORS Nginx代理跨域 Node中间件代理跨域 WebSocket postMessage JSONP 其他 什么是跨域 概念 在此之前&#xff0c;我们了解一下一个域名地址的组成&#xff1a; 跨域指的是在网络安全中&…

项目实战————苍穹外卖(DAY11)

苍穹外卖-day11 课程内容 Apache ECharts 营业额统计 用户统计 订单统计 销量排名Top10 功能实现&#xff1a;数据统计 数据统计效果图&#xff1a; 1. Apache ECharts 1.1 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#x…

基于SpringBoot Vue养老院管理

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Gradle——基础

1、Gradle基础 1.1、Ant/Maven/Gradle对比 无论那种项目构建工具&#xff0c;都有自身的优势和劣势&#xff0c;所以选择一款最适合项目的就是最好的&#xff01; 1.2、Gradle项目目录结构 Gradle项目默认目录结构和Maven项目的目录结构一致&#xff0c;都是基于约定大于配置…

各种Linux版本安装Docker

文章目录 一、Ubuntu 20.04.61. 网卡和DNS配置2. Docker安装 二、CentOS Linux 7.91. 网卡和DNS配置2. Docker安装 三、Alibaba Cloud Linux 31. DNS配置2. repo说明3. Docker安装 四、验证是否安装成功 一、Ubuntu 20.04.6 1. 网卡和DNS配置 /etc/netplan 找到 *.yaml 文件 …

第十一站:C++面向对象-多态

为什么要使用多态 当定义的子类继承父类并重写父类的方法后, 父类使用指针调用子类的同名方法,得到的却是父类同名方法的结果 #include <iostream> using namespace std; class Father { public:void play() {cout << "一起去KTV唱歌吧" << end…

主板电路学习; 华硕ASUS A43S笔记本安装win7X64(ventoy)

记录 老爷机 白色 华硕 A43S 笔记本 安装 win7X64 1. MBR样式常规安装win7X64Sp1 (华硕 A43S 安装 win7X64 ) 老爷机 白色 华硕 A43S 笔记本 安装 win7X64 &#xff08;常规安装&#xff09; 设置&#xff1a; 禁用UEFI 启用AHCI ventoy制作MBR&#xff08;非UEFI&#xff…

OpenAI的DALL·e2生成的AI图像有时会带有偏见或NSFW

专家警告说&#xff0c;OpenAI的图像生成模型DALLe2可能玩起来很有趣&#xff0c;但它生成的图片可能会带有刻板印象和偏见&#xff0c;甚至是生成NSFW图片&#xff0c;因此在现实世界中部署会有风险。 OpenAI公司承认“如果没有足够的防护措施&#xff0c;像DALLe2这样的模型…

【Linux 内核源码分析】堆内存管理

堆 堆是一种动态分配内存的数据结构&#xff0c;用于存储和管理动态分配的对象。它是一块连续的内存空间&#xff0c;用于存储程序运行时动态申请的内存。 堆可以被看作是一个由各个内存块组成的堆栈&#xff0c;其中每个内存块都有一个地址指针&#xff0c;指向下一个内存块…

Wpf 使用 Prism 实战开发Day13

配置 AutoMapper 关系映射 在上一节 ToDoController 控制器&#xff0c;或 IToDoService 服务接口中&#xff0c;方法的传参都是直接传的实体类。但在实际开发过程中&#xff0c;这样是不允许的。标准且规范的做法是&#xff0c;定义一个数据传输层&#xff0c;即Dto层。 一.在…