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

news2024/12/26 11:16:01

作者是跟着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.coloradmin.cn/o/1924458.html

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

相关文章

DockerCompose介绍,安装,使用

DockerCompose 1、Compose介绍 将单机服务-通过Dockerfile 构建为镜像 -docker run 成为一个服务 user 8080 net 7000 pay 8181 admin 5000 监控 .... docker run 单机版、一个个容器启动和停止问题: 前面我们使用Docker的时候,定义 Dockerfil…

深入理解Java泛型:概念、用法与案例分析

个人名片** 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4…

Transformer模型:Encoder的self-attention mask实现

前言 这是对Transformer模型的Word Embedding、Postion Embedding内容的续篇。 视频链接:19、Transformer模型Encoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili 文章链接:Transformer模型:WordEmbedding实现-CSDN博客 Transformer模型…

docker-compose安装PolarDB-PG数据库

文章目录 一. Mac1.1 docker-compose.yaml1.2 部署1.3 卸载4. 连接 二. Win102.1 docker-compose.yaml2.2 部署2.3 卸载 参考官方文档 基于单机文件系统部署 一. Mac 1.1 docker-compose.yaml mkdir -p /Users/wanfei/docker-compose/polardb-pg && cd /Users/wanfei…

Linux - 综合使用shell脚本,输出网站有效数据

综合示例: shell脚本实现查看网站分数 使用编辑器编辑文件jw.sh为如下内容: #!/bin/bash save_file"score" # 临时文件 semester20102 # 查分的学期, 20102代表2010年第二学期 jw_home"http://jwas3.nju.edu.cn:8080/jiaowu" # 测试网站首页地址 jw_logi…

zigbee开发工具:2、zigbee工程建立与配置

本文演示基于IAR for 8051(版本10.10.1)如何建立一个开发芯片cc2530的zigbee的工程,并配置这个工程,使其能够将编译的代码进行烧录,生成.hex文件。IAR for 8051(版本10.10.1)支持工程使用C语言&…

STM32智能交通灯系统教程

目录 引言环境准备智能交通灯系统基础代码实现:实现智能交通灯系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能交通灯系统通过STM…

Python游戏开发:四连珠(内附完整代码)

四连珠(Connect Four)是一款经典的棋类游戏,由两名玩家在7列6行的网格上轮流下棋。玩家的目标是将自己的棋子在垂直、水平或对角线上连成一条线,通常是四个棋子。如果一方成功做到这一点,那么他就赢得了游戏。如果所有…

视频监控汇聚平台:通过SDK接入大华DSS视频监控平台的源代码解释和分享

目录 一、视频监控汇聚平台 1、概述 2、视频接入能力 3、视频汇聚能力 二、大华DSS平台 1、DSS平台概述 2、大华DSS平台的主要特点 (1)高可用性 (2)高可靠性 (3)易维护性 (4&#xf…

《昇思25天学习打卡营第2天|02快速入门》

课程目标 这节课准备再学习下训练模型的基本流程,因此还是选择快速入门课程。 整体流程 整体介绍下流程: 数据处理构建网络模型训练模型保存模型加载模型 思路是比较清晰的,看来文档写的是比较连贯合理的。 数据处理 看数据也是手写体数…

【算法】平衡二叉树

难度:简单 题目 给定一个二叉树,判断它是否是 平衡二叉树 示例: 示例1: 输入:root [3,9,20,null,null,15,7] 输出:true 示例2: 输入:root [1,2,2,3,3,null,null,4,4] 输出&…

炒鸡清晰的防御综合实验(内含区域划分,安全策略,用户认证,NAT认证,智能选路,域名访问)

实验拓扑图如下: 前面六个条件在之间的实验中做过了,详细步骤可以去之前的文章看 这里简写一下大致步骤 第一步: 先将防火墙之外的配置给配置好,比如,PC的IP,交换上的Vlan划分。 第二步: 在浏览器上登…

用SurfaceView实现落花动画效果

上篇文章 Android子线程真的不能刷新UI吗?(一)复现异常 中可以看出子线程更新main线程创建的View,会抛出异常。SurfaceView不依赖main线程,可以直接使用自己的线程控制绘制逻辑。具体代码怎么实现了? 这篇文章用Surfa…

【算法专题】快速排序

1. 颜色分类 75. 颜色分类 - 力扣(LeetCode) 依据题意,我们需要把只包含0、1、2的数组划分为三个部分,事实上,在我们前面学习过的【算法专题】双指针算法-CSDN博客中,有一道题叫做移动零,题目要…

小公司的Git工作流程

项目初始化 git init并添加.gitignore文件 Git使用 通过git add . 把代码推到暂存区通过git commit -m “你的说明”,将暂存区的代码推到本地仓库将本地仓库的代码通过git push 推到远程仓库远程仓库(gitee/gitlab/github)同事就可以通过命令git pull将你推上去的…

信息学奥赛初赛天天练-46-CSP-J2020阅读程序2-进制转换、十进制转k进制、等比数列通项公式、等比数列求和公式应用

PDF文档公众号回复关键字:20240713 2020 CSP-J 阅读程序2 1阅读程序(程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填 。除特殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff0c;共计 40 分) 01 #include <iostre…

java各种锁介绍

在 Java 中&#xff0c;锁是用来控制多个线程对共享资源进行访问的机制。主要有以下几种类型的锁&#xff1a; 1.互斥锁&#xff08;Mutex Lock)&#xff1a;最简单的锁&#xff0c;一次只允许一个线程访问共享资源。如果一个线程获得了锁&#xff0c;其他线程必须等待锁被释放…

DEBUG:jeston卡 远程ssh编程

问题 jeston 打开网页 gpt都不方便 而且只需要敲命令就行 解决 下载MobaXterm(window执行) liunx需要虚拟机 软件 远程快速复制命令

【kubernetes】Helm包管理器基本概念与Chart实战

概念&#xff1a;基础架构与常用命令 三个重要概念&#xff1a; 1.chart 创建Kukernetes应用程序所必需的一组信息。 2.config 包含了可以合并到打包的chart中的配置信息&#xff0c;用于创建一个可发布的对象。 3.release 是一个与特走配置相结合的chart的运行实例。 常用命…

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界&#xff01;对于刚从Java转过来的开发者来说&#xff0c;你会发现C#和Java有很多相似之处&#xff0c;但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法&#xff0c;并比较一下与Java的异同。 程序结构 C#程序…