matplotlib教程(一)—— 入门基础

前言

           Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式;它可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等

           在使用它之前,应导入:import  matplotlib.pyplot  as  plt

1. 画布与子图

    matplotlib所绘制的图位于画布(Figure)对象中,我们可以通过去设置一张画布,进而在画布上画出按我们希望的格式排版的多个子图

 1.1 画布与子图的创建

   1.1.1 生成画布

  • 语法plt.figure()       #生成新的画布

常用参数说明:

                       

             num:画布编号或名称,数字为编号 ,字符串为名称

             figsize:指定figure的宽和高,单位为英寸,输入格式为(宽,高)

             dpi:分辨率(一般笔记本200,若要比较清楚可设置400、500左右)

             facecolo:背景颜色

             edgecolor:边框颜色

             frameon:是否显示边框(默认显示)


   1.1.2 创建单个子图

  •  语法: 画布.add_subplot(nrows,ncols,index)

常用参数说明:        

               nrows,ncols:行数,列数(即创建 几乘几 的图片)

               index:创建子图的序号位置(从1开始)

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
data = pd.read_excel(r"E:\python 资料\孙兴华 数据分析教程\matplotlib课件和笔记\课件\09.折线与柱状组合图.xlsx")
print(data)fig = plt.figure(num = "示例图") # 创建画布
first = fig.add_subplot(2,2,1) # 创建第一个子图
plt.plot(data['班级'],data['毛利率'],label = "毛利率",color="red",marker="*") #在第一个子图位置画一个折线图
second = fig.add_subplot(2,2,2) # 创建第二个子图
third = fig.add_subplot(2,2,3) # 创建第三个子图
fourth = fig.add_subplot(2,2,4) # 创建第四个子图 
plt.bar(data["班级"],data["销售量"],color="yellow")#在第四个子图位置画一个柱状图
plt.show() #显示输出图像
上述代码输出结果

   1.1.3 创建多个子图 

  • 语法:fig,axes =  plt.subplots(nrows,ncols)

 参数: 

           sharex / sharey:所有子图是否使用相同的x轴 / y轴刻度

 :这里需要用两个变量来接收,fig指生成的画布,axes是包含n×n子图的数组

        axes可以直接像二维数组那样索引,可以用 axes[ i,j ].plot / bar(  )... 在指定位置作图

# 上述代码等价
fig,axes = plt.subplots(2,2)
axes[0,0].plot(data['班级'],data['毛利率'],label = "毛利率",color="red",marker="*")#第一个子图
axes[1,1].bar(data["班级"],data["销售量"],color="yellow")#第四个子图
plt.show()

 1.2 新增子区域

     所谓新增子区域可以理解为在一个图中,我们想再添加 / 叠加另外一个图

     操作原理是通过设定图的大小和位置来进行子区域的插入 

  • 语法fig.add_axes([ left,bottom,width,height ])

 参数说明:

             left、bottom:距离边框左侧、底部的距离

             width、height:自身的宽和高度

#导入数据
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
data = pd.read_excel(r"E:\python 资料\孙兴华 数据分析教程\matplotlib课件和笔记\课件\09.折线与柱状组合图.xlsx")fig = plt.figure() #创建画布
axes1 = fig.add_axes([0.1,0.1,0.8,0.8])#设定图1的大小和位置
axes1.bar(data.班级,data.销售量) #在图1上作图
axes1.set_title("销售量") #设定图1的标题axes2 = fig.add_axes([0.65,0.6,0.25,0.25])#设定图2的大小和位置
axes2.plot(data.班级,data.毛利率)
axes2.set_title("毛利率")
plt.show()

 1.3 调整边框与子图的间距

   1.3.1 自动调整

  • 语法:fig.tight_layout()     # 不会让图片之间有重叠

   1.3.2 手动调整 

  • 语法:fig.subplots_adjust()

常用参数:
              left / right / top / bottom:子图与边框 左侧 / 右侧 / 顶部 /底部 距离百分比

              wspace / hspace:子图之间的 宽度 / 高度 百分比

 1.4 案例:图形组合 

  • 要求:利用子区域方法,作出柱形图和折线图的组合图形(需掌握折线图和柱状图知识)
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
# 导入数据
data = pd.read_excel(r"E:\python 资料\孙兴华 数据分析教程\matplotlib课件和笔记\课件\09.折线与柱状组合图.xlsx")
# 创建画布
fig = plt.figure()# 创建图1————柱状图
picture1 = fig.add_subplot(1,1,1)
picture1.bar(data["班级"],data["销售量"],label = "销售量")
picture1.legend(loc = "best") # 打开图例,best指自动选择最佳位置
picture1.set_xlabel("班级") #设置x轴名称
picture1.set_ylabel("销售量") #设置y轴名称# 创建图2————折线图
picture2 = picture1.twinx() # 设置x轴为共享轴,图1使用左侧y轴,图2使用右侧y轴
picture2.plot(data["班级"],data["毛利率"],marker = "o",color = "red",label = "毛利率")
picture2.legend(bbox_to_anchor=(1,0.93)) # 打开图例
picture2.set_ylabel("毛利率") #设置y轴名称plt.show()
柱状图和折线图的组合图

2. 图的样式

      matplotlib的主函数plot接收带有x和y轴的数组,以及一些可选的参数来指明颜色和线的类型

  • 语法:plot(x,y,[ fmt ],color = ,linestyle = ,marker =  )

 2.1 样式字符串

      matplotlib的格式字符串 fmt “ [ color ] [ marker ] [ linestyle ] ”组成,线条的颜色、标记、线的形状 三部分

 例子:ax.plot(x,y,“ko--”)           表示黑色,标记为实心圆的虚线 

 

 2.1.1 颜色(color)

  • 单个颜色字符:取值范围为r’,‘g’,‘b’,‘c’,‘m’,‘y’,‘k’
  • 也可以自定义颜色类型,例如:SeaGreen、#8FBC8F 等
颜色对应示意图

  2.1.2 标记(marker)

  •  标记即数据点的图案样式,标记字符与外观对应关系如下图所示:
标记字符与外观对应关系

标记的大小与颜色:

  • ms:标记的大小(markersize)
  • mfc:标记内部的颜色(markerfacecolor)
  • mec:标记边框的颜色(markeredgecolor)

  2.1.3 线的形状(linestyle)

  • 线形的取值范围为:-’, ‘--’, ‘-.’, ‘:’
  • 线形字符与外观对应关系如下图所示:
线形字符与外观对应关系

线的其他参数:

  • lw:线的宽度(linewidth)
  • drawstyle:点的插入方式(默认线性内插, “steps-post”:阶梯式)

2.2 刻度与标签

 pyplot中有许多对象方法,可以控制刻度,标题,标签等

 如果我们在调用时不传入参数,就会返回当前的参数值;如果传入参数,就会修改参数值

方法作用备注
fig.suptitle()设置画布标题
axes.set_title()设置图片标题
axes.set_xlabel()设置x轴的名称y轴直接将x换成y即可
axes.set_xlim()设置x轴的范围传入一个含min和max的列表
axes.set_xticks()设置x轴刻度

直接传入一个列表即可

也可直接传入两个列表,另一为对应标签

axes.set_xtickslabels()设置x轴刻度的对应标签

传入一个与刻度数量相同的字符串列表

 关于标签的一些参数:
                     rotation:标签逆时针旋转度数(默认0)                    

                     fontsize:标签字体大小(xx-small, x-small, small, medium, large, x-large,

                                                                xx-large, larger, smaller  或者输入数字也可)

 2.3 图例

  • 语法:axes.legend( [ handles= ,labels =] ) 

命名参数
             handles:可见对象(比如线条、形状)序列,传入一个元组

             labels:各个对象的名称,传入一个字符串列表

             title:图例的名称

注:     前两个参数应该配合一起使用;

            若在定义各个图 / 线时,使用label参数定义了名称,则可以什么都不传入,自行匹配


 位置参数:

              loc:默认为 “best” 即自动选择最优位置,该参数也可传入(left、right、center、

                       upper、lower)或者他们的组合来表示具体位置

              

              bbox_to_anchor:该参数可直接传入一个坐标(x,y),x和y取值范围为0 ~ 1


样式参数:

           prop:传入一个数字,调整图例大小

           ncol:排列方式(默认1:并列展示,2:并排展示)   

import matplotlib.pyplot as pltline1, = plt.plot([1, 1], marker='o')
line2, = plt.plot([2, 2])
plt.legend((line1, line2), ['1st', '2nd'], loc= "best",title='legends', ncol=2, # 按行排列facecolor='gray', edgecolor='r') #背景颜色 / 边框颜色
plt.show()

 2.4 注释(数据标签)

   所谓注释,即我们想在图上添加一些重要点的说明;或者我们想标出数据点所对应的y值 

  • 语法:plt.text(x,y,string,...)   

参数说明:

         

         x,y:坐标值 一一> 指注释的位置

         string:注释的内容,若要写数据标签,直接传入str(y数据)即可

         fontsize:注释字体大小

         ha水平对齐方式 ,参数:[ ‘center’(居中对齐) | ‘right’ (右对齐)| ‘left’(左) ]

         va垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]

         rotation:注释的逆时针旋转角度

         alpha:文字透明度

  • 补充:enumerate() 

       在添加注释时,因为我们在填入坐标值时一次只能传入一对,所以我们不能利用dataframe的行列索引传入,我们需要分别获取对应的下标(x轴)和数据(y轴),我们就可以利用enumerate函数:for  x,y  in  enumerate(列表名):   x,y就分别得到对应下标和数据

import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
# 导入数据
data = pd.read_excel(r"E:\python 资料\孙兴华 数据分析教程\matplotlib课件和笔记\课件\09.折线与柱状组合图.xlsx")
# 创建画布
fig = plt.figure()# 创建图1————柱状图
picture1 = fig.add_subplot(1,1,1)
picture1.bar(data["班级"],data["销售量"],label = "销售量")
picture1.legend(loc = "best") # 打开图例,best指自动选择最佳位置
picture1.set_ylim([0,12000]) #设置y轴范围# 添加数据标签
for x,y in enumerate(data["销售量"]):picture1.text(x,y+200,str(y),ha = "center")plt.show()
添加数据标签后的销量图

3. 图的保存

  • 语法:plt.savefig(路径字符串,dpi = ,format = )

参数说明:
            dpi:图片分辨率,默认为100(一般用200)

            facecoler / edgecolor:多余背景 / 边框 颜色(默认白色)

            format:格式(‘png’,‘pdf’,‘jpg’...)

            bbox_inches保存的图片范围(若传入‘tight’,则去除周围空白

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

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

相关文章

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数(BCD):Binary Coded Decimal美国信息交换标准代码(ASCII):American Standard Code for Information Interchange 数据的排列顺序 最低有效位(LSB)&…

Docker安装Elesticsearch7详细步骤

​ 1、创建安装目录 mkdir -p /usr/local/docker/es-docker 2、配置虚拟内存 如果不配置,后面启动es会报错。 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 配置如下 vi /etc/sysctl.conf vm.max_map_coun…

基于Hadoop的网上购物行为大数据分析及预测系统【flask+echarts+机器学习】前后端交互

有需要本项目或者部署的系统可以私信博主,提供远程部署和讲解 本研究基于淘宝用户行为的开源数据展开大数据分析研究,通过Hadoop大数据分析平台对阿里天池公开的开源数据集进行多维度的用户行为分析,为电商销售提供可行性决策。 首先我们将大…

Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX(Open Neural Network Exchange,开放神经网络交换)格式,也可以通过ONNX实现不同AI框架(如Pytorch、TensorFlow、Caffe2、PaddlePaddle等)之间的模型转换。 …

[渗透测试学习] Surveillance -HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描端口 nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb 那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插…

云防护概念及云防护作用

云防护是什么 云防护是一种网络安全技术,旨在保护云计算环境中的数据和系统免受恶意攻击和未授权访问。 云防护适用场景 一切http.https.tcp协议,如游戏、电商、金融、物联网等APP PC 网站。 云防护的主要作用 云防护的主要作用是通过搭规模庞大的云防…

NowinAndroid—2024 Android现代开发全功能应用

NowinAndroid—2024 Android现代开发全功能应用 现代Android开发全功能示例应用Now-in-Android,它是用Kotlin和Jetpack Compose开发的,功能非常强大。这个应用遵循了安卓设计和开发的最佳方法,旨在给开发者提供实用的参考资料。无论你是新手…

【控制篇 / 策略】(7.4) ❀ 04. 修改IP地理位置数据库 ❀ FortiGate 防火墙

【简介】虽然通过FortiGuard服务可以更新IP地理位置数据库,但是实际使用环境中,总会有部分IP地址不符合我们的愿景,这种情况下,可以通过修改IP地理位置数据库来达到我们的目标。 更新IP地理位置数据库 更新IP地理位置数据库是Fort…

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客:Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程(群友Blev提供) - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码:Open Source Development | Open Source …

LeetCode刷题:141. 环形链表

题目: 是否独立解答出:否,有思路,但是代码报错,参考解题代码后,修改通过 解题思路:利用循环与哈希表存储每一个节点,如果发现添加不进去说明,存在环,正常来说…

Docker的基础概念及命令

这篇主要介绍一下Docker比较重要的两个概念,镜像和容器,以及操作它们的一些常用命令。 文章目录 一、基础命令二、镜像三、容器 一、基础命令 docker -v:查看 Docker 的版本 systemctl start docker:启动docker systemctl stat…

刚买的助听器就弄丢了,不想白配,快来看看这8大助听器防丢小技巧

我们知道助听器可以让听损人士重新听到美妙的声音和享受沟通的乐趣。但是,助听器也是一种很贵的物品,如果不小心弄丢了,就会让人心痛不已。 更有甚者,有些人因为害怕丢失助听器,而不敢佩戴助听器,错过了听力…