python:使用matplotlib库绘制图像(四)

作者是跟着http://t.csdnimg.cn/4fVW0学习的,matplotlib系列文章是http://t.csdnimg.cn/4fVW0的自己学习过程中整理的详细说明版本,对小白更友好哦!

四、条形图

1. 一个数据样本的条形图

  • 条形图:常用于比较不同类别的数量或值,以及进行简单的数据分析。
  • 直方图:常用于分析数据的集中趋势、离散程度以及异常值的存在。
区别频数分布直方图条形图
横轴上的数据连续的,是一个范围孤立的,代表一个类别
长条形之间没有空隙有空隙
频数的表示一般用面积表示;当宽度相同时,用长度表示长条形的高度

 代码详解:

  1. n = 12 这行代码定义了条形图中的条形数量,这里设置为12。

  2. X = np.arange(n) 这行代码使用NumPy的arange函数创建一个数组,包含从0到n-1的整数,这个数组将用于条形图的x轴坐标。

  3. Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) 这行代码计算第一个条形图的高度。每个高度是通过一个随机数乘以(1-X/float(n))得到的,这样可以确保条形图从左到右逐渐减小。np.random.uniform(0.5,1.0,n)生成一个包含n个随机数的数组,每个数在0.5到1.0之间。

  4. Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) 这行代码与上面类似,计算第二个条形图的高度。

  5. bar(X, -Y2, facecolor='#ff9999', edgecolor='white') 这行代码在同一个x轴坐标上绘制第二个条形图,但是高度为负值,这样两个条形图就会堆叠在一起。

  6. for x,y in zip(X,Y1): 这个循环遍历XY1数组的元素,将Y1的值作为文本绘制在每个条形上方。

text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')代码详解:

  • x, y+0.05:这两个参数指定了文本在图表中的位置。x是条形的x轴坐标,y+0.05表示在条形的顶部加上0.05的偏移量,这样文本就会出现在条形的上方。偏移量确保文本不会与条形图重叠。

  • '%0.2f' % y:这是一个格式化字符串,用于将y的值格式化为带有两位小数的浮点数。%0.2f中的%是一个占位符,0.2f指定了浮点数的格式:至少一位整数,最多两位小数,小数点后不足两位的部分用0填充。

  • ha='center':这个参数指定了文本的水平对齐方式。hahorizontalalignment的缩写,'center'表示文本应该水平居中对齐,即文本的中心位于指定的x坐标上。

  • va='bottom':这个参数指定了文本的垂直对齐方式。vaverticalalignment的缩写,'bottom'表示文本的底部与指定的y坐标对齐,即文本的底部位于指定的y坐标上。

from pylab import *n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')#xticks(X)
for x,y in zip(X,Y1):text(x, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
for x, y in zip(X, -Y2):text(x, y-0.15, '%.2f'% y, ha='center', va='bottom')ylim(-1.25,+1.25)
show()

2. 多个数据样本的条形图

# 设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = Falselabel_list = ['2014', '2015', '2016', '2017']  # 横坐标刻度显示值
num_list1 = [20, 30, 15, 35]  # 纵坐标值1
num_list2 = [15, 30, 40, 20]  # 纵坐标值2
x = range(len(num_list1))# 绘制条形图
rects1 = plt.bar(x, height=num_list1, width=0.4, alpha=0.5, color='gold', label='部门一')
rects2 = plt.bar([i+0.4 for i in x], height=num_list2, width=0.4, color='lightcyan', label='部门二')# 设置y轴属性
plt.ylim(0, 50)
plt.ylabel('数量')# 设置x轴属性
plt.xticks([index+0.2 for index in x], label_list)
plt.xlabel("年份")
plt.title('某某公司')
plt.legend()# 显示文本
for rect in rects1:height = rect.get_height()plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')
for rect in rects2:height = rect.get_height()plt.text(rect.get_x() + rect.get_width() / 2, height + 1, str(height), ha='center', va='bottom')plt.show()

 

3. 水平条形图

代码详解:

  1. price = [39.5, 39.9, 45.4, 38.9, 33.34]:这行代码定义了一个列表price,包含了5个数值,分别代表了不同平台的图书价格。

  2. plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.5):这行代码使用plt.barh()函数绘制了一个水平条形图。range(5)生成了一个从0到4的整数序列,用于指定每个条形的位置。price列表中的值被用来填充条形的高度。

  3. plt.yticks(range(5), ['亚马逊', '当当网', '中国图书网', '京东', '天猫']):这行代码设置了y轴的刻度标签,与条形的位置对应,这里使用了中文标签。

  4. for x, y in enumerate(price)::这行代码开始了一个循环,enumerate(price)会生成一个包含索引和价格的元组序列,然后for循环会遍历这个序列。

import matplotlib.pyplot as plt
import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = Falseprice = [39.5, 39.9, 45.4, 38.9, 33.34]# 绘制水平条形图
plt.barh(range(5), price, height=0.7, color='steelblue', alpha=0.5)
plt.yticks(range(5), ['亚马逊', '当当网', '中国图书网', '京东', '天猫'])
plt.xlim(30, 47)
plt.xlabel('价格')
plt.title('不同平台图书价格')
for x, y in enumerate(price):plt.text(y+0.2, x-0.1, '%s'%y)plt.show()

4. 绘制不同数据样本进行对比的水平条形图

代码详解:

  1. y = range(1, len(num_list1)+1):这行代码使用range()函数创建了一个整数序列,从1开始,到num_list1的长度加1结束。这个序列将用于确定条形图的y轴位置

  2. y = [index*1.5 for index in y]:这行代码通过列表推导式创建了一个新的列表y,每个元素都是原列表y中对应元素的1.5倍。这会将条形图的y轴位置放大,以便于在同一个图表中绘制两个条形图。

  3. plt.barh(y, num_list1, height=0.4, color='gold', alpha=0.5):这行代码使用plt.barh()函数绘制了第一个条形图y列表中的值被用来确定条形的位置,num_list1列表中的值被用来填充条形的高度。

  4. plt.barh([index-0.4 for index in y], num_list2, height=0.4, color='paleturquoise', alpha=0.5):这行代码使用plt.barh()函数绘制了第二个条形图。这里使用了列表推导式来创建一个新的y列表,每个元素是原列表y中对应元素的减去0.4,以便于在第一个条形图的下方绘制第二个条形图。

  5. plt.text(x+0.8, y1-0.1, str(x), ha='center', va='bottom'):这行代码在每个条形旁边添加了数量标签。x+0.8确保了标签不会被条形覆盖,而y1-0.1确保了标签不会被y轴的刻度覆盖。

  6. for x, y2 in zip(num_list2, y)::这行代码开始了一个新的循环,用于添加第二个条形图的数量标签。

  7. plt.text(x+0.8, y2-0.5, str(x), ha='center', va='bottom'):这行代码在每个条形旁边添加了第二个数量标签。x+0.8确保了标签不会被条形覆盖,而y2-0.5确保了标签不会被y轴的刻度覆盖。

label_list = ['2014', '2015', '2016', '2017'] 
num_list1 = [20, 30, 15, 35]  
num_list2 = [15, 33, 40, 20]  
y = range(1, len(num_list1)+1)
y = [index*1.5 for index in y]plt.barh(y, num_list1, height=0.4, color='gold', alpha=0.5)
plt.barh([index-0.4 for index in y], num_list2, height=0.4, color='paleturquoise', alpha=0.5)
plt.yticks([index-0.2 for index in y], label_list)
plt.ylabel('年份')
plt.xlim(0, 45)
plt.xlabel('数量')for x, y1 in zip(num_list1, y):plt.text(x+0.8, y1-0.1, str(x), ha='center', va='bottom')
for x, y2 in zip(num_list2, y):plt.text(x+0.8, y2-0.5, str(x), ha='center', va='bottom')plt.show()

 

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

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

相关文章

3dmax-vray5大常用材质设置方法

3dmax云渲染平台——渲染100 以高性价比著称,是预算有限的小伙伴首选。 15分钟0.2,60分钟内0.8;注册填邀请码【7788】可领30元礼包和免费渲染券 提供了多种机器配置选择(可以自行匹配环境)最高256G大内存机器,满足不同用户需求。 木纹材质 肌理调整&…

函数语意学(The Sematics of Function)

1、非静态成员函数转化为非成员函数 c 设计准则之一就是:非静态成员函数至少和非成员函数有相同的效率。 也就是说下面两个函数具有相同的效率: float magnitude(const Point3d * this){...}; float Point3d::magnitude(){...};以 float Point3d::mag…

练习9.5 彩票分析

练习 9.14:彩票 创建⼀个列表或元素,其中包含 10 个数和 5 个字 ⺟。从这个列表或元组中随机选择 4 个数或字⺟,并打印⼀条消息, 指出只要彩票上是这 4 个数或字⺟,就中⼤奖了。 练习 9.15:彩票分析 可以使…

面试题 05. 替换空格

05. 替换空格 题目描述示例 题解 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 示例1 输入:s “We are happy.” 输出:“We%20are%20happy.” 题解 class Solution { public:string replaceSpace(stri…

jQuery 元素选择器集合

jQuery 提供了一套非常强大的元素选择器,它们可以以各种方式定位和操作网页文档中的元素。 以下是 jQuery 中的一些常用选择器: 1、基本选择器 #id:选择 ID 为 id 的元素。.(类选择器):选择具有特定类的…

2.5 OJ 网站的使用与作业全解

目录 1 OJ 网站如何使用 1.1 注册账户 1.2 登录账户 1.3 做题步骤 2 本节课的 OJ 作业说明 3 章节综合判断题 4 课时2作业1 5 课时2作业2 6 课时2作业3 1 OJ 网站如何使用 〇J 是英文 Online Judge 的缩写,中文翻译过来是在线判题。当用户将自己编写的代码…

基于XC7VX690T FPGA+ZU15EG SOC的6U VPX总线实时信号处理平台(支持4路光纤)

6U VPX架构,符合VITA46规范板载高性能FPGA处理器:XC7VX690T-2FFG1927I板载1片高性能MPSOC:XCZU15EG-2FFVB1156I板载1片MCU,进行健康管理、时钟配置等V7 FPGA外挂2个FMC接口两片FPGA之间通过高速GTH进行互联 基于6U VPX总线架构的通…

从零开始做题:神奇的棋盘

题目 打开得到一副adfgvx加密棋盘 观察txt数据只有1-5,猜测是数字字母坐标转换,用notepad批量操作一下 解题 AGAXXDAGGVGGVDVADAVXDGADVGDVAADDDDFXAFAFDGDVXXDGGDGGDXDDFDDXVGXADGVDFXVVAADDXDXXADDVGGGXGXXXXGXXGGXGDVVVGGGAGAAAAGAAGGAGDDDAGAGGG…

解释如单例、工厂、观察者等常见设计模式在Android开发中的应用。

在Android开发中,设计模式的应用是提升代码质量、增强可维护性和可扩展性的重要手段。单例模式(Singleton)、工厂模式(Factory)、观察者模式(Observer)等是其中最为常见且实用的设计模式。下面我…

如何对已经存在的表进行加分区方案分区函数

我参考网上的,写了2给存储过程,一个初始创建文分区方案分区函数;一个可以通过作业新增文件组文件件; 但是初始没有绑定表,网上的都是在创建表是绑定分区方案,但是我的表是已经存在的,怎么绑定 …

Python实现网站IP地址查询

使用socket库实现网站的ip地址查询,以便于使用CC攻击和DDoS攻击(闹着玩的) import socket def get_website_ip(website): try: ip socket.gethostbyname(website) return ip except socket.gaierror: retur…

最小数字游戏(Lc2974)——模拟+优先队列(小根堆)、排序+交换

你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下: 每一轮,Alice 先从 nums 中移除一个 最小 元素&…

力扣 383赎金信

思路,用unordered_map存储magazine中字符以及字符出现的次数 遍历ransomNote中每个字符,如果能在map中找到,则对应value减一,如果字符对应的value小于零,意味着magazine中找不到与ransomNote里这个字符对应的字符&…

翁恺-C语言程序设计-05-3. 求a的连续和

05-3. 求a的连续和 输入两个整数a和n,a的范围是[0,9],n的范围是[1,8],求数列之和S aaaaaa…aaa…a(n个a)。如a为2、n为8时输出的是222222…22222222的和。 输入格式: 输入在一行中给出两个整数&#xf…

VUE_TypeError: Cannot convert a BigInt value to a number at Math.pow 解决方法

错误信息 TypeError: Cannot convert a BigInt value to a number at Math.pow vue 或 react package.json添加 "browserslist": {"production": ["chrome > 67","edge > 79","firefox > 68","opera >…

实战演练-2021年电赛国一之三端口DC-DC变换器

文章目录 前言一、题目二、题目分析1、题目要求解析2、题目方案选定方案一(使用buck-boost电路+双向DC-DC电路(前端))方案二(使用同步整流Boost升压电路+双向DC-DC电路(前端))方案三(使用同步整流Boost升压…

实时聊天 Vue + Vuex + sockjs-client + stompjs进行websocket连接

实时聊天 知识点WebSocket介绍SockJSSTOMP 开发环境功能实现安装应用在vuex中创建vue中的引入、监听、实例化与收发、订阅消息引入组件实例化与订阅计算属性监听收到消息封装的发送消息的公共方法发送消息 完整的代码 知识点 WebSocket介绍 WebSocket 是一种在 Web 应用中实现…

二叉搜索树大冒险:寻找-插入-删除

OK,看我们题目就可知道啦,今天要分享学习的一种数据结构就是二叉搜索树。 内容题目也说了三个大概的,分别是寻找、插入、删除。 讲这个之前呢,那么就先讲讲这个二叉搜索树是何方神圣呢? 二叉搜索树: 又…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(五)-同时支持无人机和eMBB用户数据传输的用例

引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…

全网最详细单细胞保姆级分析教程(二) --- 多样本整合

上一节我们研究了如何对单样本进行分析,这节我们就着重来研究一下如何对多样本整合进行研究分析! 1. 导入相关包 library(Seurat) library(tidyverse) library(patchwork)2. 数据准备 # 导入单样本文件 dir c(~/Desktop/diversity intergration/scRNA_26-0_filtered_featur…