【2】Matplotlib

news/2024/11/18 8:29:29/

2-1Matplotlib介绍与安装

什么是Matplotlib

Matplotlib是一个Python的基础绘图库,它可与 NumPy 一起使用,代替Matlab使用。

为什么要学习Matplotlib

  1. 将数据进行可视化,使数据更直观
  2. 使数据更加更具有说服力

Matplotlib安装

由于Matplotlib是第三方库,所以我们需要安装它才可以使用。注意,Matplotlib3.0要求python3版本才可安装使用。
安装命令:pip install matplotlib
eg: pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
安装可参考官网:https://matplotlib.org/users/installing.html
已安装好的
在这里插入图片描述
还可以pip freeze pip list 查看已安装得第三方库

2-2Matplotlib绘图

图片与子图

Matplotlib所绘制的图位于图片(Figure)对象中。我们可以通过plt.figure生成一个新的图片:

from matplotlib import pyplot as plt
fig = plt.figure()

创建一个新的figure对象
在这里插入图片描述
返回值就是返回这个figure对象
在这里插入图片描述
在这里插入图片描述

注意
• 在IPython中,执行该代码一个空白的绘图窗口就会出现,但在Jupyter中则没有任何显示
但是可以通过plt.subplot创建一个或多个子图。
如:带有四个子图的Matplotlib图片
在这里插入图片描述

plt.subplot()

Add a subplot to the current figure.在当前图形中添加子图。

plt.subplot(221)

这么写
在这里插入图片描述
在这里插入图片描述
绘制图形,比如(x,y)构成点
在这里插入图片描述
若是直接用plt.scatter(range(10),range(10))直接绘制,默认最后一个子图绘制图形。
在这里插入图片描述
当我们使用pycharm时
记得把这个勾选 inherit global site-packages继承全局网站包
plt.show() 呈现图片 这样在pycharm中才能看到图片
在这里插入图片描述

plt.subplots()

创建figure对象并且设置子图
在这里插入图片描述
subplots()不仅创建了一个figure对象还添加了子图,是更便捷的。
在这里插入图片描述
返回值是figure对象和子图
除此之外,Matplotlib包含一个便捷方法plt.subplots创建一个新的图片,然后返回包含了已生成子图对象的Numpy数组。

• plt.subplots(nrows, ncols, sharex, sharey)
• nrows子图的行数
• ncols子图的列数
• sharex 所有子图使用相同的x轴刻度
• sharey 所有子图使用相同的y轴刻度

在这里插入图片描述
axs[0,0]的效果和axs[0][0]结果一样
axs[0,0]第0行第0列 也就是左上角的子图
在这里插入图片描述
在这里插入图片描述
加上plt.show()就是最终结果了
在这里插入图片描述
如果仅用一个变量axs接收返回值,就会返回一个元组
但是我们画图仅仅用axs就行了,所以这里还需要拆包
在这里插入图片描述
这样显然更麻烦所以不推荐
在这里插入图片描述

那么实际上,当我们不需要使用子图时(仅需一张图),可以通过plt对象直接绘制图形。
在这里插入图片描述

Matplotlib绘制图形

matplotlib能够绘制折线图,散点图,条形图,直方图,饼图等等。
具体可参考:https://matplotlib.org/gallery/index.html

折线图

折线图介绍

折线图以折线的上升下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况
在这里插入图片描述

折线图绘制

在这里插入图片描述
若是x 的值值数量与y值的数量不匹配,也就是xy不是等长的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Docstring:
Plot y versus x as lines and/or markers
文档字符串:
将y与x绘制为直线和/或标记
其实plot就是绘制的意思
Parameters就是参数的意思
折线图可以通过plot()函数来绘制
• plt.plot(x, y) # 使用默认的线样式及颜色绘制x,y构建的图形
实例
数据如下,绘制折线图形
• x = [1,2,3,4]
• y = [2,3,1,2]

import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [2,3,1,2]
plt.plot(x,y)
plt.show()

在这里插入图片描述

以上实例,x数组对应图形x轴的值,y数组对应图形y轴的值,并且通过plt.plot()绘制之后,通过plt.show()展示图片,释放内存。
并且,plt.plot()函数除了传入制图数据,还可以设置线的颜色等。
• color 设置线的颜色
• linestyle 设置线的样式
• marker 标记样式
代码如下

import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [2,3,1,2]
plt.plot(x,y,color="g",linestyle="--")
plt.show()

效果如下
在这里插入图片描述

plt.plot()参数使用具体可参考:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.plot.html#matplotlib.axes.Axes.plot

在这里插入图片描述
https://matplotlib.org/api/markers_api.html#module-matplotlib.markers
练习
假设一天中每隔两个小时的气温分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],绘制图形。

图形组成(图形的组件)

实际上,图形的组成除了x,y轴。还有很多组件。如下图
在这里插入图片描述

在这里插入图片描述

改刻度

若使刻度变为
在这里插入图片描述
range(0,24,0.5)这样行吗,当然是不行的,因为步长只能是整数。

x_t=[i/2 for i in range(0,48)]
x_t[0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0,9.5,10.0,10.5,11.0,11.5,12.0,12.5,13.0,13.5,14.0,14.5,15.0,15.5,16.0,16.5,17.0,17.5,18.0,18.5,19.0,19.5,20.0,20.5,21.0,21.5,22.0,22.5,23.0,23.5]

在这里插入图片描述
在这里插入图片描述
字太挤了,把画布变大些。
此处的figsize的传参数是有考究的
在这里插入图片描述
可看出只能传元组或者列表,因为元组不可变,我们传元组。
后面还可以加一个参数 使刻度旋转
rotation在这里插入图片描述
然后呢需求又变了
在这里插入图片描述
!!!
在这里插入图片描述
!!!
完整步郰
在这里插入图片描述
在这里插入图片描述
上面的写法是对的,但是下面写法就是错的,就因为不在列表中。
在这里插入图片描述

中文显示问题

当我们需要设置轴标签,标题等,通常会使用到中文。但是,matplotlib默认不显示中文,如图:
解决方法
方法一
该设置方法是全局的,而且只支持ttf的不支持ttc的。

import matplotlib
font = {'family':'SimHei','weight':'bold','size':12
}
matplotlib.rc("font", **font)

在这里插入图片描述
仅仅需要记住是matplotlib下的rc 模块中,而且下面又很多字体的例子
在这里插入图片描述

方法二
大部分都用的方法,全局设置
在这里插入图片描述

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False   # 步骤二(解决坐标轴负数的负号显示问题)

方法三
既支持ttc字体,又支持ttf字体。局部设置
在这里插入图片描述
在这里插入图片描述

从字体管理器matplotlib.font_manager中导入字体样式FontProperties,再把这个字体样式实例化 再指定设置字体的路径,相当于把这个字体注册到matplotlib的字体库中去了。

from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties 
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
x = [1,2,3,4]
y = [3,2,1,3]
plt.plot(x,y)
plt.xlabel("x轴标签",fontproperties=font)
plt.show()

练习1

如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况
首先要用到模块random
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

左右两边的值都能取到的
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述
在这里插入图片描述

练习2

假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌从11岁到30岁每年交的男女朋友的数量如列表a和b,请绘制出该数据的折线图,以便分析自己和同桌每年交男女朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2]
要求:
• y轴表示个数
• x轴表示岁数,比如11岁,12岁

添加注释文本

plt.annotate() 基本使用
• text 是注释的文本
• xy 是需要注释的点的坐标
• xytext 是注释文本的坐标
• arrowprops 是箭头的样式属性

散点图

散点图介绍

散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式
特点:判断变量之间是否存在数量关联趋势,表示离群点(分布规律)

散点图绘制

散点图通过scatter()函数绘制
• plt.scatter(x,y) # 以默认的形状颜色等绘制散点图
练习1
假设通过爬虫你获取到了长沙2019年4,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间变化的某种规律
a = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]
练习2
为了对某一产品进行合理定价,我们对此类商品进行了试销实验,价格与需求量数据如下。利用图表分析规律。
价格
60
80
40
30
70
90
95
需求量
100
50
120
135
65
45
40
price = [60,80,40,30,70,90,95]
sales = [100,50,120,135,65,45,40]

条形图

条形图介绍

条形图是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图。
特点
• 能够使人们一眼看出各个数据的大小。
• 易于比较数据之间的差别。

条形图绘制

条形图通过bar()函数绘制
• plt.bar(x, height) # 绘制以x为x轴位置,height为y轴位置的竖条形图

水平条形图绘制

水平条形图通过barh()函数绘制
• plt.barh(y, width) # 绘制以y为y轴位置,width为y轴位置的水平条形图
练习1
假设你获取到了2019年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据
a = [“流浪地球”,“复仇者联盟4:终局之战”,“哪吒之魔童降世”,“疯狂的外星人”,“飞驰人生”,“蜘蛛侠:英雄远征”,“扫毒2天地对决”,“烈火英雄”,“大黄蜂”,“惊奇队长”,“比悲伤更悲伤的故事”,“哥斯拉2:怪兽之王”,“阿丽塔:战斗天使”,“银河补习班”,“狮子王”,“反贪风暴4”,“熊出没”,“大侦探皮卡丘”,“新喜剧之王”,“使徒行者2:谍影行动”,“千与千寻”]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22] 单位:亿

数据来源:http://58921.com/alltime/2017
练习2
水果
Q1销售额
Q2销售额
苹果
1000
1200
梨子
800
700
车厘子
3000
2800
练习3
根据练习1的数据,绘制水平条形图。

直方图

直方图介绍

直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据范围,纵轴表示分布情况
特点:绘制连续性的数据,展示一组或者多组数据的分布情况(统计)

直方图绘制

直方图通过hist()函数绘制
• plt.hist(x, bins=None) # 绘制以x为数值,bins为组数
• 组数 = 极差/组距
练习
某地区连续50年中四月份平均气温数据如下:
temp_li= [6.9,4.1,6.6,5.2,6.4,7.9,8.6,3.0,4.4,6.7,7.1,4.7,9.1,6.8,8.6,5.2,5.8,7.9,5.6,8.8,8.1,5.7,8.4,4.1,6.4,6.2,5.2,6.8,5.6,5.6,6.8,8.2,6.4,4.8,6.9,7.1,9.7,6.4,7.3,6.8,7.1,4.8,5.8,6.5,5.9,7.3,5.5,7.4,6.2,7.7]
根据以上数据,推断该地区四月份平均气温的分布类型。
解析:样本中最小值a=3.0,最大值b=9.7。则分布区间[3,10]等分为7个小区间,区间长度为1,以下为样本值在各小区间的频数与评率。
区间
频数
频率
[3,4]
1
1/50
(4,5]
6
6/50
(5,6]
11
11/50
(6,7]
15
15/50
(7,8]
9
9/50
(8,9]
6
6/50
(9,10]
2
2/50
练习2
绘制班级的身高分布图形
height = [160,163,175,180,176,177,168,189,188,177,174,170,173,181]

扇形图(Pie)

扇形图介绍

扇形图,用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数。

扇形图绘制

扇形图通过pie()函数绘制
• plt.pie(x, explode=None, labels=None)
• x 扇形数据
• explode 设置某几个分块是否要分离饼图
• labels 每块扇形标签
• autopct 百分比数据标签
• shadow 是否显示阴影
• plt.pie()有3个返回值
• patches 绘制饼图每一块的对象
• texts 文本的列表
• autotexts 百分比的文本列表
练习
将以下frac数据绘制扇形图,并且设置其扇形标签为label
frac = [1/50,6/50,11/50,15/50,9/50,6/50,2/50]
label = [’[3,4]’,’(4,5]’,’(5,6]’,’(6,7]’,’(7,8]’,’(8,9]’,’(9,10]’]

雷达图

雷达图介绍

雷达图(Radar Chart)又被叫做蜘蛛网图,适用于显示三个或更多的维度的变量的强弱情况。比如某个企业在哪些业务方面的投入等,都可以用雷达图方便的表示。

绘制雷达图

在matplotlib.pyplot中,可以通过plt.polar来绘制雷达图,这个方法的参数跟plt.plot非常的类似,只不过是x轴的坐标点应该为弧度(2*PI=360°)。
小栗子
如下数据,进行绘制雷达图
quaters = [‘Q1’,‘Q2’,‘Q3’,‘Q4’,‘Q5’,‘Q6’,‘Q7’]
sales = [40,91,44,90,20,54,80]
注意:
• 因为polar并不会完成线条的闭合绘制,所以我们在绘制的时候需要在theta中和values中在最后多重复添加第0个位置的值,然后在绘制的时候就可以和第1个点进行闭合了。
• polar只是绘制线条,所以如果想要把里面进行颜色填充,那么需要调用fill函数来实现。
• polar默认的圆圈的坐标是角度,如果我们想要改成文字显示,那么可以通过xticks来设置。

箱型图

箱型图介绍

箱线图是一种直观简洁的方式去呈现一组数据的分布。 箱线图广泛用于各个数据分析领域,它能非常简单明了地显示一组数据中5个重要数值,并且还能发现一组数据中的存在的异常值。
• 最大值
• 最小值
• 中位数
• 下四分位数(Q1)
• 上四分位数(Q3)

箱型图绘制

Python当中可以使用Matplotlib当中的boxplot()绘制箱型图,绘制效果如下。
plt.boxplot()
• x:需要绘制的箱型图的数据
• notch:是否展示置信区间 默认为False
• sym:代表异常点的符号表示 默认为圆点
• vert:是否是垂直的 默认是True
• whis:上下限系数 默认为1.5
• positions:设置每个盒子的位置
• widths:设置每个盒子的宽度
• labels:每个盒子的label
• meanline和showmean:都为True的时候 会展示平均线
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
data = np.random.randint(1,100,size=100)
data = np.append(data,np.array([-100,300])) # 添加两个异常值
plt.boxplot(data,sym="^",widths=0.2,meanline=True,showmeans=True)
plt.show()
绘图参考链接:
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot


http://www.ppmy.cn/news/754103.html

相关文章

学了Python基础,苦于无法上手实战,看这本

Python语言能让编程变得更加简单易学。但是,在掌握Python基础知识后,你是否面临编程技能无法提升,不知后续学习该如何开展的问题?《Python编程实战 妙趣横生的项目之旅》包含许多有趣的编程实践项目,这些项目能带给你灵…

太阳系外宜居星球

宜居星球 与太阳系外宜居星球相关的信息屡屡见诸报端。 除Gliese 667C的行星外,还有4颗行星是热门候选: Gliese 581g,2010年9月宣布发现,是一颗岩态行星, 距离地球大约20光年,公转周期大约30天,…

自动形式化与通用人工智能:Google Research 2020年报告

原论文:A Promising Path Towards Autoformalization and General Artificial Intelligence https://doi.org/10.1007/978-3-030-53518-6_1 选自论文集 Intelligent Computer Mathematics 13th International Conference, CICM 2020 作者Christian Szegedy是超级巨佬…

计算机美术设计基础教案,电脑美术美术教案

本节课进步的地方:1、在设计中体现了综合性和多样性,在美术教学中融入了音乐,还准备在以后教学中融入电脑教学,运用计算机的绘图软件绘画。2、在课件的制作中对音乐和图片的选择有较强的视觉和听觉冲击力。3、在语言讲解上较以前精练简洁。4、…

VQA: Visual Question Answering 视觉问答

论文:Antol S, Agrawal A, Lu J, et al. Vqa: Visual question answering[C]//Proceedings of the IEEE international conference on computer vision. 2015: 2425-2433. 摘要 我们提出了一个自由式和开放式的视觉问答(VQA)任务。通过给定…

芭比Q了,AI已经具备人格,机器人要发起「人机大战」

近日,日本东京大学发布在《物质》杂志上的一项研究引发了「舆论地震」。 科学家在机器人手指上制作出了活体人类皮肤,该人皮不仅有真人皮肤般的纹理,而且还能防水,更神奇的是能「自愈」。 日本东京大学「机器人身上的活体皮肤」 …

03-Matplotlib数据可视化

Matplotlib介绍与安装 Matplotlib介绍 什么是Matplotlib Matplotlib是一个Python的绘图库,它可与 NumPy 一起使用,可以代替Matlab使用。 为什么要学习Matplotlib 1、将数据进行可视化,使数据更直观 2、是数据更加具有说服力 Matplotlib安装 由于Matplotlib是第三方库,…

ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)使用 Postman连接ES进行测、ESRestAPI(操作索引CRUD操作文档CRUD)、练习

要理解倒排索引要能够使用DSL命令操作索引库要能够使用DSL命令操作文档要能够使用RestAPI操作索引库、文档 一、ES简介 理解倒排索引的概念和作用理解es和MySql的区别和使用场景 1. 数据库查询的问题 假如我们有一个电商系统,需要查询商品。以前一直是直接从MySql数…