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 plt

line1, = 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.mfbz.cn/a/314006.html

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

相关文章

LeetCode刷题笔记

面试经典150题 1. 数组/字符串 1.1 合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺…

python 文件夹中 __init__.py

common文件夹下有:project,__init__.py,common1.py project文件夹内有:__init__.py,p.py common文件夹里,project文件夹 各放了一个 __init__.py 这样就可以在p.py内用from导入common1.py内的代码 # p…

Git的简单使用说明

Git入门教程 git的最主要的作用:版本控制,协助开发 一.版本控制分类 ​​ 1.本地版本控制 ​​ 2.集中版本控制 ​​ 所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不…

第一次在RUST官方论坛上留言发布我的Rust板箱

第一次在RUST官方论坛上发帖子,有点紧张~地址在这里: 【My Rust Crate】obtains linux local information - The Rust Programming Language Forum (rust-lang.org)

设计模式之装饰者模式

装饰者模式 装饰者模式是一种设计巧妙的设计模式,它能够动态的添加对象功能,而对原始对象无干扰。java程序设计中有一个很重要的原则就是尽可能实现复用。逻辑复用只有两种模式,一种是继承,一种是委托。继承模式两者之间是强依赖…

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载)

超详细讲解Transformers自然语言处理NLP文本分类、情感分析、垃圾邮件过滤等(附数据集下载) 什么是自然语言处理 (NLP) ? 自然语言处理 (NLP) 是计算机科学的一个分支,更具体地说,是人工智能 (AI) 的分支,旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语…

程序员如何写高水平简历?(附模板)

Q:什么是高水平的简历? A:满足HR需求的同时,最大化的体现自身价值的简历是高水平的简历 HR的需求是什么? ✅ HR想看到清晰专业的简历模板 ——家人们每天看几百份简历谁懂啊!花里胡哨真看不下去一点&…

FPGA:我的零基础学习路线(2022秋招已上岸)持续更新中~

可内推简历,丝我即可 前言 初次接触FPGA是在2022年3月左右,正处在研二下学期,面临着暑假找工作,周围的同学大多选择了互联网,出于对互联网的裁员形势下,我选择了FPGA,对于硬件基础知识我几乎是…

Mysql-排序查询方法

接上篇Mysql数据库的基础操作-CSDN博客 25. 基础-SQL-DCL-权限控制-_哔哩哔哩_bilibili 1、排序语法 2、查询结果示例 这个查询结果,因为特意选的age18 的数据来统计,所以当每一条数据的age一样时,使用worknno进行排序。可以看到work的升序和…

19_注解

文章目录 注解注解的作用注解的语法注解的使用 元注解注解处理器案例 注解VS配置文件注解的应用 注解 Annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理可以把Annotation理解为一个标签注解是不允许继承的 注…

鸿蒙开发笔记(一):ArkTS概述及声明式UI的使用

ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 ArkTS在TS的基础上主要扩展了如下能力: 基本语法:ArkTS定义…

C++内存管理机制(侯捷)笔记3

C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第三讲:malloc和…

波动,热传导,扩散方程建立

数学物理方程是从自然科学的各个领域和工程技术领域中导出的偏微分方程和积分方程.在这些以偏微分方程为基础的数学模型中,二阶线性偏微分方程中的三个典型方程与定解条件的建立、解法及其应用.描述振动和波动过程的波动方程、描述输运过程的热传导&…

【笔记】Blender4.0建模入门-1、2

Blender入门 ——邵发 1.1 课程介绍 Blender,一款3D建模软件,小乔、免费、全流程 常见的3D建模软件: - 3DsMax/Maya/Blender/Cinema4D/ZBrush...游戏影视 - Proe/Solidworks/Inventor/UG...工业建模 - SketchUp/Rhino/Revit...建筑设计 …

想要简化重复订单吗?不妨考虑一揽子采购订单

企业想提高采购流程效率,简化大批量采购是一个很好的开始。财务、会计和采购部门通过系统化订购大量物品(如纸张、打印机墨水和墨粉、清洁用品、纸制品和其他易重复采购的消耗品)可以节省时间和金钱。借助正确的采购订单(PO&#…

俩万字详解C++STL期末复习知识点(C++STL课本源码私信可得)

邸老师复习建议 复习注意事项 1 不考死记硬背的题,比如名词解释。 2 选择题重点考核宏观性、综合性的问题,比如:把电话通讯录存入容器,该选哪一个容器? 3 选择题重点考核理解性的问题,比如,…

C语言——(printf和scanf介绍)

一.printf 1.基本用法 printf()的作用是将参数文本输出的屏幕。如下; 2.占位符 printf()可以在输出文本中指定占位符 ,“占位符”,也就是这个位置可以用其他值代入。 如: …

竞赛保研 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的视频多目标跟踪实现 …

小魔推行业玩法:生活美容怎么做短视频矩阵?

如今每个实体老板都想让自己生意做的更好,那就需要有更多获取流量的方式,获得大量的同城曝光;在市场内卷的状况下,通过短视频来做门店引流无疑是绝佳的方式,让更多同城的用户知晓自己的门店,这个时候通过小…

HarmonyOS4.0系统性深入开发18公共事件简介

公共事件简介 HarmonyOS通过CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布、退订公共事件的能力。 公共事件从系统角度可分为:系统公共事件和自定义公共事件。 系统公共事件:CES内部定义的公共事…