首页 > 编程语言 >python:使用matplotlib库绘制图像(四)

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

时间:2024-07-12 20:56:01浏览次数:24  
标签:plt python 代码 0.5 matplotlib height num 绘制 条形图

作者是跟着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()

 

标签:plt,python,代码,0.5,matplotlib,height,num,绘制,条形图
From: https://blog.csdn.net/2302_80978287/article/details/140287984

相关文章

  • 基于python+爬虫实现招聘职位数据分析[源码+LW+部署讲解视频]
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • BS-Python-061 基于Python+Django实现在线考试系统
    作者主页:编程千纸鹤作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享收藏点赞不迷路 关注作者有好处文末获得源码 项目编号:BS-Python-061一,环境......
  • 10个Python函数参数进阶用法及代码优化
    目录1.默认参数值:让函数更加灵活2.关键字参数:清晰的调用方式3.*args:拥抱不确定数量的位置参数4.**kwargs:处理不确定数量的关键字参数5.参数解包:简化多参数的传递6.命名关键字参数:限制关键字参数7.局部变量与全局变量:理解作用域8.高级:装饰器(@decorator)9.Lambd......
  • python每日学习4:函数的定义和各类参数定义与用法
    目录目录一、函数的定义二、参数的定义和用法1、必选参数2、默认参数3、可变参数4、关键字参数5、命名关键字参数三、参数在实际操作中的要求一、函数的定义1、函数代码块以def关键词开头,后接函数名称和圆括号()2、在圆括号内定义传入参数3、函数的第一行语句可以......
  • 对!就是你!python特训之字典怎么学?我教你!超详细!
    目录一、字典的定义二、字典的键与值三、字典的常见操作总结一、字典的定义字典(Dictionary)是一种在多种编程语言中广泛使用的数据结构,用于存储键值对(key-valuepairs)的集合。在字典中,每个元素都是一个键值对,其中键(Key)是唯一的,用于标识对应的值(Value)。键和值可以是任意......
  • 003_python3 解释器 注释 运算符
    Python3解释器1.Linux设置环境变量$PATH=$PATH:/usr/local/python3/bin/python3#设置环境变量2.交互式编程$python#启动Python解释器3.脚本式编程Windows中写入脚本xx.py文件,执行pythonxx.py #cmd当中直接执行Linux中文件顶部写入  #!/usr/bin/envpyth......
  • 【视频讲解】Python比赛LightGBM、XGBoost+GPU和CatBoost预测学生在游戏学习过程表现|
    全文链接:https://tecdat.cn/?p=36990原文出处:拓端数据部落公众号分析师:QiZhang背景基于游戏进行学习能让学校变得有趣,这种教育方法能让学生在游戏中学习,使其变得有趣和充满活力。尽管基于游戏的学习正在越来越多的教育环境中使用,但能用应用数据科学和学习分析原理来......
  • python文件操作
    思维导图代码1.文件编码2.文件的读取①open()打开函数#f是open函数的文件对象,对象是python中的一种特殊的数据类型,#拥有属性和方法,可以使用对象、属性或对象.方法对其进行访问f=open("python.py","r",encoding="utf-8")print(type(f))#<class'_io.TextIOW......
  • 002_python3 基本数据类型
    1.变量Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。"类型"是变量所指的内存中对象的类型等号(=)用来给变量赋值。2.多个变量赋值,同时赋值a=b=c=1a,b,c=1,2,"runoob"a=3;b=4.2;c=5+5j3.标准数据类型 Python3中常......
  • python读写西门子S7协议的传感器数据
    下列示例读写200smartPLC设备importtimefromsnap7importutil,clientimportthreadingdefread_plc_valve():whileTrue:try:#建立一个客户端对象my_plc=client.Client()#如果是200smart,必须有此段代码......