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'] = False

label_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 matplotlib

matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False

price = [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.mfbz.cn/a/797126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32之六:SysTick系统滴答定时器

目录 1. SysTick简介 2. 时钟来源 3. SysTick寄存器 3.1 CTRL—SysTick控制及状态寄存器 3.2 RELOAD—SysTick重装载数值寄存器 3.3 CURRENT—SysTick当前数值寄存器 4. systick系统定时器配置 5. 延时函数实现 5.1 延时函数编写步骤 5.2 微秒级延时函数delay_us 5.…

代理模式(大话设计模式)C/C++版本

代理模式 C #include <iostream> using namespace std;class Subject // Subject 定义了RealSubject和Proxy的共用接口..这样就在任何使用RealSubject的地方都可以使用Proxy { public:virtual void func(){cout << "Subject" << endl;} };class R…

Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())

2024每日刷题&#xff08;144&#xff09; Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…

全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)

1. 项目概述 本文详细介绍了一个基于STM32微控制器和AWS IoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点: 使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266 W…

Android Spinner

1. Spinner Spinner是下拉列表&#xff0c;如图3-14所示&#xff0c;通常用于为用户提供选择输入。Spinner有一个重要的属性&#xff1a;spinnerMode&#xff0c;它有2种情况&#xff1a; 属性值为dropdown时&#xff0c;表示Spinner的数据下拉展示&#xff0c;如图1&#xf…

GenAl如何改变 DevOps 中的软件测试?

TestComplete 是一款自动化UI测试工具&#xff0c;这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的自动化测试。 TestComplete 集成了一种精心设计的自动化引擎&#xff0c;可以自动记录和回放用户的操作&#xff0c;方便用户进行UI&#xff08;用户界面&…

快速使用BRTR公式出具的大模型Prompt提示语

Role:文章模仿大师 Background: 你是一位文章模仿大师&#xff0c;擅长分析文章风格并进行模仿创作。老板常让你学习他人文章后进行模仿创作。 Attention: 请专注在文章模仿任务上&#xff0c;提供高质量的输出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

SpringCloud第三篇(服务中心与OpenFeign)

p 文章目录 一、服务中心二、Nacos注册中心 一、服务中心 在上一章我们实现了微服务拆分&#xff0c;并且通过Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题。 试想一下&#xff0c;假如商品微服务被调用较多&#xff0c;为了应对更高的并发…

韦东山嵌入式linux系列-具体单板的 LED 驱动程序

笔者使用的是STM32MP157的板子 1 怎么写 LED 驱动程序&#xff1f; 详细步骤如下&#xff1a; ① 看原理图确定引脚&#xff0c;确定引脚输出什么电平才能点亮/熄灭 LED ② 看主芯片手册&#xff0c;确定寄存器操作方法&#xff1a;哪些寄存器&#xff1f;哪些位&#xff1f;…

pytorch-pytorch之LSTM

目录 1. nn.LSTM2. nn.LSTMCell 1. nn.LSTM 初始化函数输入参数与RNN相同&#xff0c;分别是input_size&#xff0c;hidden_size和num_layer foward函数也与RNN类似&#xff0c;只不过返回值除了out外&#xff0c;ht变为(ht,ct) 代码见下图&#xff1a; 2. nn.LSTMCell 初…

基于与STM32的加湿器之旋转编码器驱动

1.简介 旋转编码器&#xff0c;也被称为轴编码器或脉冲编码器&#xff08;SPC&#xff09;&#xff0c;是一种将旋转的机械位移量转换为电气信号的传感器&#xff0c;其信号可用于检测位置、速度等。 2.工作原理 旋转编码器的工作原理主要基于光电转换或磁电转换。以光电式旋转…

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App 定制化

华为防火墙nat和智能选路配置

要求&#xff1a; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9&#xff0c;多出口环境基于带宽比例进行选路&…

k8s集群新增节点

目前集群状态 如K8S 集群搭建中规划的集群一样 Masternode01node02IP192.168.100.100192.168.100.101192.168.100.102OSCent OS 7.9Cent OS 7.9Cent OS 7.9 目前打算新增节点node03 Masternode01node02node03IP192.168.100.100192.168.100.101192.168.100.102192.168.100.1…

NLP之词的重要性

文章目录 何为重要词TF*IDFTF*IDF其他版本TFIDF 算法特点TF*IDF的优势TF*IDF劣势 TF*IDF的应用搜索引擎文本摘要文本相似度计算 上一篇文章介绍了新词的发现&#xff0c;用内部凝固度和左右熵来发现新词。这时候机器对一篇文章有了对词的一定理解&#xff0c;这时我们让机器上升…

了解Maven

一.环境搭建 如果使用的是社区版 版本要求为&#xff1a;2021.1-2022.1.4 如果使用的是idea专业版就无需版本要求,专业版下载私信我&#xff0c;免费教你下载 二&#xff0c;Maven 什么是Maven&#xff0c;也就是一个项目管理工具&#xff0c;用来基于pom的概念&#xff0c…

k8s(五)---名称空间

五、名称空间 名称空间是k8s划分不同工作空间的逻辑单位,是k8s资源逻辑隔离的机&#xff0c;。可以给不同的租户&#xff0c;不同的环境、不同的项目创建对应的命名空间。 1、查看名称空间 kubectl get ns kubectl get namespaces 此处展示了四个命名空间 2、管理名称空间 1…

【数智化案例展】沃太能源——MES系统建设引领智能制造新篇章

‍ 联想集团案例 本项目案例由联想集团投递并参与数据猿与上海大数据联盟联合推出的《2024中国数智化转型升级创新服务企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 沃太能源股份有限公司&#xff0c;一家在储能产品及智慧能源管理方案领域享有盛誉的…

一 GD32 MCU 开发环境搭建

GD32 系列为通用型 MCU &#xff0c;所以开发环境也可以使用通用型的 IDE &#xff0c;目前使用较多的是 KEIL、 IAR 、 GCC 和 Embedded Builder &#xff0c;客户可以根据个人喜好来选择相应的开发环境。 目录 1、使用 Keil 开发 GD32 目前市面通用的MDK for ARM版本有Kei…

[笔记] SEW的振动分析工具DUV40A

1.便携式振动分析仪 DUV40A 文档编号&#xff1a;26871998/EN SEW是一家国际化的大型的机械设备供应商。产品线涵盖电机&#xff0c;减速机&#xff0c;变频器等全系列动力设备。DUV40A是他自己设计的一款振动分析工具。 我们先看一下它的软硬件参数&#xff1a; 内置两路传…