宝藏级全网最全的matplotlib详细教程-数据分析必备手册(4.5万字总结)(代码片段)

ZSYL ZSYL     2023-01-15     640

关键词:

【宝藏级】全网最全的Matplotlib详细教程(4.5万字总结)

1. 数据分析中常用图

折线图:

折线图用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势。示例图如下:

折线图应用场景:

  1. 折线图适合X轴是一个连续递增或递减的,对于没有规律的,则不适合使用折线图,建议使用柱状图。
  2. 如果折线图条数过多,则不应该都绘制在一个图上。

柱状图:

典型的柱状图(又名条形图),使用垂直或水平的柱子显示类别之间的数值比较。其中一个轴表示需要对比的分类,另一个轴代表相应的数值。

柱状图有别于直方图,柱状图无法显示数据在一个区间内的连续变化趋势。柱状图描述的是分类数据,回答的是每一个分类中“有多少?”这个问题。 示例图如下:

柱状图应用场景:

  1. 适用于分类数据对比。
  2. 垂直条形图最多不超过12个分类(也就是12个柱形),横向条形图最多不超过30个分类。如果垂直条形图的分类名太长,那么建议换成横向条形图。


  1. 柱状图不适合表示趋势,如果想要表示趋势,应该使用折线图。

直方图:

直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的条纹表示数据分布的情况。一般用横轴表示数据类型,纵轴表示分布情况。

直方图是数值数据分布的精确图形表示。为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是(但不是必须的)相等的大小。

直方图的应用场景:

  1. 显示各组数据数量分布的情况。
  2. 用于观察异常或孤立数据。
  3. 抽取的样本数量过小,将会产生较大误差,可信度低,也就失去了统计的意义。因此,样本数不应少于50个。

散点图:

散点图也叫 X-Y 图,它将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定。

通过观察散点图上数据点的分布情况,我们可以推断出变量间的相关性。如果变量之间不存在相互关系,那么在散点图上就会表现为随机分布的离散的点,如果存在某种相关性,那么大部分的数据点就会相对密集并以某种趋势呈现。数据的相关关系主要分为:正相关(两个变量值同时增长)、负相关(一个变量值增加另一个变量值下降)、不相关、线性相关、指数相关等,表现在散点图上的大致分布如下图所示。那些离点集群较远的点我们称为离群点或者异常点。

示例图如下:

散点图的应用场景:

  1. 观察数据集的分布情况。
  2. 通过分析规律,根据样本数据特征计算出回归方程。

饼状图:

饼状图通常用来描述量、频率和百分比之间的关系。在饼图中,每个扇区的弧长大小为其所表示的数量的比例。

饼状图的应用场景:

  1. 展示多个分类的占比情况,分类数量建议不超过9个。
  2. 对于一些占比值非常接近的,不建议使用饼状图,可以使用柱状图。

箱线图:

箱线图(Box-plot)又称为盒须图、盒式图或箱型图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱线图的绘制方法是:先找出一组数据的上限值、下限值、中位数(Q2)和下四分位数(Q1)以及上四分位数(Q3);然后,连接两个四分位数画出箱子;再将最大值和最小值与箱子相连接,中位数在箱子中间。

四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。多应用于统计学中的箱线图绘制。它是一组数据排序后处于25%和75%位置上的值。四分位数是通过3个点将全部数据等分为4部分,其中每部分包含25%的数据。很显然,中间的四分位数就是中位数,因此通常所说的四分位数是指处在25%位置上的数值(称为下四分位数)和处在75%位置上的数值(称为上四分位数)。与中位数的计算方法类似,根据未分组数据计算四分位数时,首先对数据进行排序,然后确定四分位数所在的位置,该位置上的数值就是四分位数。与中位数不同的是,四分位数位置的确定方法有几种,每种方法得到的结果会有一定差异,但差异不会很大。

上限的计算规则是:
IQR=Q3-Q1
上限=Q3+1.5IQR
下限=Q1-1.5IQR

箱线图的应用场景:

  1. 直观明了地识别数据中的异常值。
  2. 利用箱线图判断数据的偏态。
  3. 利用箱线图比较几批数据的形状。
  4. 箱线图适合比较多组数据,如果知识要看一组数据的分布情况,建议使用直方图。

更多参考:

https://antvis.github.io/vis/doc/chart/classify/compare.html

2. Matplotlib库

Matplotlib是一个Python2D绘图库,通过Matplotlib,开发者可以仅需要几行代码,便可以生成折线图,直方图,条形图,饼状图,散点图等。

安装:

如果是用Anaconda,可以通过conda install matplotlib或者通过pip install matplotlib进行安装。

基本使用:

首先先看以下例子:

import matplotlib.pyplot as plt
import numpy as np
plt.plot(range(10),[np.random.randint(0,10) for x in range(10)])

那么就会出现以下图:

其中plot是一个画图的函数,他的参数为plot([x],y,[fmt],data=None,**kwargs)。其中fmt可以传一个字符串,用来给这个图做一些样式修改的。默认的绘制样式是b-,也就是蓝色实体线条。比如我想将原来的图的线条改成点状,那么可以通过以下代码实现:

import matplotlib.pyplot as plt
plt.plot(range(10),[np.random.randint(0,10) for x in range(10)],":")

其中使用:代表点线,是matplotlib的一个缩写。这些缩写还有以下的:

字符类型字符类型
‘-’实线‘–’虚线
‘-.’虚点线‘:’点线
‘.’‘,’像素点
‘o’圆点‘v’下三角点
‘^’上三角点‘<’左三角点
‘>’右三角点‘1’下三叉点
‘2’上三叉点‘3’左三叉点
‘4’右三叉点‘s’正方点
‘p’五角点‘*’星形点
‘h’六边形点1‘H’六边形点2
‘+’加号点‘x’乘号点
‘D’实心菱形点‘d’瘦菱形点
‘_’横线点

除了设置线条的形状外,我们还可以设置点的颜色。示例代码如下:

plt.plot([1,2,3,4,5],[1,2,3,4,5],'r') #将颜色线条设置成红色
plt.plot([1,2,3,4,5],[1,2,3,4,5],color='red') #将颜色设置成红色
plt.plot([1,2,3,4,5],[1,2,3,4,5],color='#000000') #将颜色设置成纯黑色
plt.plot([1,2,3,4,5],[1,2,3,4,5],color=(0,0,0,0)) #将颜色设置成纯黑色

给线条设置颜色总体来说有三种方式,第一种是使用颜色名称(rred的缩写)的形式,第二种是使用十六进制的方式,第三种是使用RGBRGBA的方式。如果使用的是颜色名称,那么可以和线的形状写在同一个字符串中。比如使用红色的五角点,那么可以使用如下的方式实现:

plt.plot([1,2,3,4,5],[1,2,3,4,5],'rp') #将颜色线条设置成红色

其中可以表示颜色的缩写字符有如下:

字符颜色
‘b’蓝色,blue
‘g’绿色,green
‘r’红色,red
‘c’青色,cyan
‘m’品红,magenta
‘y’黄色,yellow
‘k’黑色,black
‘w’白色,white

设置图的信息:

现在我们添加图后,没有指定x轴代表什么,y轴代表什么,以及这个图的标题是什么。因此以下我们通过一些属性来设置一下。

设置线条样式:

  1. 使用plot方法:plot方法就是用来绘制线条的,因此可以在绘制的时候就把线条相关的样式通过参数传进去。示例代码如下:

     plt.plot(x,y,linewidth=2)
    
  2. 通过Line2D对象来设置:plot方法会返回一个装有Line2D对象的列表,比如lines=plt.plot(x1,y1,x2,y2)因为绘制了两根线条,因此lines中会有两个2D对象。而如果plot只绘制一根线条,那么lines中就只有一个Line2D对象。拿到这个Line2D对象后就可以通过set_属性名设置线条的样式了:

     lines = plt.plot(x,y)
     line = lines[0]
     line.set_aa(False) #关掉反锯齿
     line.set_alpha(0.5) #设置0.5的透明度
    
  3. 使用plt.setp来设置:setp的好处是一次性可以设置多根线条的样式。示例代码如下:

     lines = plt.plot(x,y)
     plt.setp(lines,linewidth=10,alpha=0.5)
    
  4. 更多Line2D属性:

设置轴和标题:

  1. 设置轴名称:可以通过plt.xlabelplt.ylabel来设置x轴和y轴的的名称。示例代码如下:

     plt.plot(x,y,linewidth=10,color='red')
     plt.xlabel("x轴")
     plt.ylabel("y轴")
    

    默认情况下是显示不了中文的。需要设置字体。可以通过以下代码来实现:

# 加载字体
font = font_manager.FontProperties(fname="C:\\Windows\\Fonts\\msyh.ttc")
plt.plot(x,y,linewidth=10,color='red')
plt.xlabel("x轴",fontproperties=font)
plt.ylabel("y轴",fontproperties=font)

加载字体的时候,可以到C:\\Windows\\Fonts中找你喜欢的并且可以显示中文的字体。找到字体后,还需要找到字体的真实名称。方法是右键->属性->安全->对象名称:

  1. 设置标题:可以通过plt.title方法来实现。示例代码如下:
font = font_manager.FontProperties(fname="C:\\Windows\\Fonts\\msyh.ttc")
plt.title("sin函数",fontproperties=font)
  1. 设置x轴和y轴的刻度:之前我们画的图,x轴和y轴的刻度都是matplotlib自动生成的。如果想要在生成图的时候手动的指定,那么可以通过plt.xticksplt.yticks来实现:

     plt.xticks(range(0,20,2)) #在x轴上的刻度是0,2,4,6...20
    

    以上会把那个刻度显示在x轴上。如果想要显示字符串类型,那么可以再构造一个数组,这个数组的长度必须和x轴刻度的长度保持一致。然后传给xticks的第二个参数。示例代码如下:

_x = range(0,20,2)
_xticks = ["%d坐标"%i for i in _x]
plt.xticks(_x,_xticks,fontproperties=font) #在x轴上的刻度是0坐标,2坐标...20坐标

同样y轴的刻度设置也是一样的。示例代码如下:

_y = np.arange(-1,1,0.25)
_yticks = ["%.2f点"%i for i in _y]
plt.yticks(_y,_yticks,fontproperties=font)

效果图如下:

复仇者联盟电影票房案例:

avenger = [17974.4,50918.4,30033.0,40329.1,52330.2,19833.3,11902.0,24322.6,47521.8,32262.0,22841.9,12938.7,4835.1,3118.1,2570.9,2267.9,1902.8,2548.9,5046.6,3600.8]
plt.figure(figsize=(15,5))
plt.plot(avenger,marker="o")
font.set_size(10)
plt.xticks(range(20),["第%d天"%x for x in range(1,21)],fontproperties=font)
plt.xlabel("天数",fontproperties=font)
plt.ylabel("票房数(万)",fontproperties=font)
plt.grid()

设置marker:

有时候,我们想要在一些关键点上重点标记出来。那么我们可以通过设置marker来实现。示例代码如下:

x = np.linspace(0,20)y = np.sin(x)plt.plot(x,y,marker="o")

我们设置了markero,这样就是会在(x,y)的坐标点上显示出来,并且显示的是圆点。其中o跟之前的线条样式的简写是一样的。另外,还可以通过markerfacecolor属性和markersize来指定标记点的颜色和大小。示例代码如下:

# 以下设置标记点的颜色为黑色,尺寸为10
plt.plot(x,y,marker="o",markerfacecolor='k',markersize=10)

设置注释文本:

有时候需要在图形中的某个点标记或者注释一下。那么我们可以使用plt.annotate(text,xy,xytext,arrowprops=)来实现,其中text是注释的文本,xy是需要注释的点的坐标,xytext是注释文本的坐标,arrowprops是箭头的样式属性。示例代码如下:

ax = plt.subplot(111)

x = np.arange(0.0, 5.0, 0.01)
y = np.cos(2*np.pi*t)
line, = plt.plot(x, y,linewidth=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black',shrink=0.05),
)

plt.ylim(-2, 2)
plt.show()

设置图形样式:

如果想要调整图片的大小和像素,可以通过plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)来实现。
其中num是图的编号,figsize的单位是英寸,dpi是每英寸的像素点,facecolor是图片背景颜色,edgecolor是边框颜色,frameon代表是否绘制画板。
示例代码如下:

plt.figure(figsize=(20,8),dpi=80)
# 其他的绘制图形的代码

我们也可以使用grid方法,来显示图片的网格:

plt.plot(x,y,color="r")
plt.grid()

保存图片:

可以调用plt.savefig(path)来保存当前的图片。示例代码如下:

plt.savefig("./abc.png")

绘制多个图:

绘制多个图有两种形式,第一种形式是在一张图中绘制多跟线条,第二种形式是绘制多个子图形。以下分别进行讲解。

绘制多根折线:

绘制多根线条,只要准备好坐标,重新使用plt.plot绘制即可。示例代码如下:

from matplotlib import font_managerx = np.linspace(0,20)y = np.sin(x)z = np.cos(x)font = font_manager.FontProperties(fname="C:\\Windows\\Fonts\\msyh.ttc")plt.xlabel("x轴",fontproperties=font)plt.ylabel("y轴",fontproperties=font)_x = range(0,20,2)_xticks = ["%s点"%i for i in _x]plt.xticks(range(0,20,2),_xticks,fontproperties=font,rotation=45)_y = list(np.range(-1,1,0.25))_yticks = ["%.2f点"%i for i in _y]plt.yticks(_y,_yticks,fontproperties=font)plt.plot(x,y)plt.plot(x,z)

示例图如下:

绘制多个子图:

绘制子图的时候,我们可以使用plt.subplotplt.subplots来实现。示例代码如下:

plt.subplot(221)
plt.plot(np.arange(10),c='r')
plt.subplot(222)
plt.plot(np.sin(np.arange(10)),c='b')
plt.subplot(223)
plt.plot(np.cos(np.arange(10)),c='y')
plt.subplot(224)
plt.plot(np.tan(np.arange(10)),c='g')

效果图如下:

其中subplot中的211212分别代表的意思是,第一个数表示这个大图中总共有2行,第二个数表示总共有1列,然后第三个数表示当前绘制第几个图。

也可以使用fig,axs=plt.subplots(rows,cols,*args,**kwargs)来绘制多个图形,返回值是一个元组,其中的fig参数是figure对象,axsaxes对象的array。示例代码如下:

figure,axes = plt.subplots(2,2)
axes[0,0].plot(np.sin(np.arange(10)),c='r')
axes[0,1].plot(np.cos(np.arange(10)),c='b')
axes[1,0].plot(np.tan(np.arange(10)),c='y')
axes[1,1].plot(np.arange(10),c='g')

效果图跟之前使用plt.subplot一样。另外使用subplotsubplots都可以传递sharex/sharey参数,这两个参数表示是否需要共享X轴和Y轴。示例代码如下:

figure,axes = plt.subplots(2,2,sharex=True,sharey=True)
axes[0,0].plot(np.sin(np.arange(10)),c='r')
axes[0,1].plot(np.cos(np.arange(10)),c='b')
axes[1,0].plot(np.tan(np.arange(10)),c='y')
axes[1,1].plot(np.arange(10),c='g')

风格设置:

matplotlib图片默认内置了几种风格。我们可以通过plt.style.available来查看内置的所有风格:

['bmh',
'classic',
'dark_background',
'fast',
宝藏级全网最全的pandas详细教程(2万字总结)(代码片段)

【回炉重造】Python之Pandas详细教程前言为什么要学习Pandas?什么是Pandas?1.Pandas的索引操作1.Series和DataFrame中的索引都是Index对象2.索引对象不可变,保证了数据的安全3.常见的Index种类3.1Series索引1.index指定行索引名2.行索引3.切片... 查看详情

宝藏级全网最全的pandas详细教程(2万字总结)(代码片段)

【回炉重造】Python之Pandas详细教程前言为什么要学习Pandas?什么是Pandas?1.Pandas的索引操作1.Series和DataFrame中的索引都是Index对象2.索引对象不可变,保证了数据的安全3.常见的Index种类3.1Series索引1.index指定行索引名2.行索引3.切片... 查看详情

宝藏级全网最全的seaborn详细教程-数据分析必备手册(2万字总结)(代码片段)

数据分析必备手册-Seaborn详细教程seaborn库安装:官方文档:关系绘图relplot1.基本使用:2.添加hue参数:3.添加col和row参数:4.指定具体的列:5.绘制折线图:分类绘图1.分类散点图:1.1.stripplot:1.2.... 查看详情

❄️全网最详细的python入门基础教程,python最全教程(非常详细,整理而来)

📢前言前两天闲来无事唠嗑,听朋友说Python是世界上最好的语言~🤡我内心很疑惑,最好的语言不是“C酷”🙈吗(狗头保命)于是想要学一学他说的这个最好的语言😏原文是一篇大佬发的,但是很多网... 查看详情

《java小白到资深开发之路-最全教程|寻找c站宝藏》

文章大纲一:IntelliJIDEA开发工具教程二:JAVA入门教程三:JAVA基础知识的使用四:数据库的认识和使用五:如何正确使用图形化界面操作数据库六:JAVAWeb教程-拥有属于自己的第一个网页七:SSM的入门到精通八:SpringBoot的正确用法九:微服务... 查看详情

全网最全的博客美化系列教程07.添加一个分享的按钮吧(代码片段)

全网最全的博客美化系列教程相关文章目录【全网最全的博客美化系列教程】01.添加Github项目链接【全网最全的博客美化系列教程】02.添加QQ交谈链接【全网最全的博客美化系列教程】03.给博客添加一只萌萌哒的小仓鼠【全网最... 查看详情

全网最全的博客美化系列教程08.自定义地址栏logo(代码片段)

全网最全的博客美化系列教程相关文章目录【全网最全的博客美化系列教程】01.添加Github项目链接【全网最全的博客美化系列教程】02.添加QQ交谈链接【全网最全的博客美化系列教程】03.给博客添加一只萌萌哒的小仓鼠【全网最... 查看详情

全网最全的博客美化系列教程05.公告栏个性时间显示的实现(代码片段)

全网最全的博客美化系列教程相关文章目录【全网最全的博客美化系列教程】01.添加Github项目链接【全网最全的博客美化系列教程】02.添加QQ交谈链接【全网最全的博客美化系列教程】03.给博客添加一只萌萌哒的小仓鼠【全网最... 查看详情

全网最全的博客美化系列教程06.推荐和反对炫酷样式的实现(代码片段)

全网最全的博客美化系列教程相关文章目录【全网最全的博客美化系列教程】01.添加Github项目链接【全网最全的博客美化系列教程】02.添加QQ交谈链接【全网最全的博客美化系列教程】03.给博客添加一只萌萌哒的小仓鼠【全网最... 查看详情

全网最全讲解最详细的ps教程(第一期:基础教程1.0)

...f0c;请耐心阅读,下面是视频链接,搭配使用链接:全网最详细最全面的PS教程.1.快捷键的使用:这是Photoshop基础中的基础,却也是提高工作效率的最佳方法。快捷键的使用,使你可以将精力更好的集中在你的作... 查看详情

全网最全最新的大数据系统学习路径

大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是PB或EB级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并发处理、高可用处理、集群、... 查看详情

转:typora入门:全网最全教程

Typora入门:全网最全教程  查看详情

全网最全无错误的cmake教程20篇

CMake基础教程(1)什么是cmakeCMake基础教程(2)在Linux下为一个最简单的工程写一个最简单的CMakeLists.txt生成MakefileCMake基础教程(3)cmake变量 查看详情

死磕:sql行转列汇总(全网最全最详细)

参考技术A阅读目录PIVOT用于将列值旋转为列名(即行转列),在SQLServer2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIVOT(聚合函数(列)FOR列in(…))ASP注意:PIVOT、UNPIVOT是SQLServer2005的语法,使用需修改数据库兼容级别(在... 查看详情

累积八年真题!全网超详细蓝桥杯试题解析|寻找c站宝藏

Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!很多小伙伴私信我在软件开发中算法的知识应该怎么学习,对于算法的训练又应该去参加哪些比赛,有很多也问过我一些关于ACM和蓝桥杯的一些知识。... 查看详情

全网最详细的python入门基础教程(非常详细,赶紧收藏)(代码片段)

前言前两天闲来无事唠嗑,听朋友说Python是世界上最好的语言,我内心很疑惑,最好的语言不是“C酷”吗(狗头保命)。于是想要学一学他说的这个最好的语言,于是我足足整理了两天,才将它整理齐全,有可能... 查看详情

宝藏级pyecharts超详细的使用指南(代码片段)

Python可视化神器-pyecharts手册pyecharts简介优点:安装:官方文档:pyecharts快速开始在`Notebook`中创建一个条形图:链式调用:配置选项:全局配置项`AnimationOpts`:画图动画配置项`InitOpts`& 查看详情

androidv1签名与校验原理分析(全网最全最详细)(代码片段)

【前言】     AndroidApkV1签名方式是一开始时使用的签名方案,不过V1签名方式也称作Jar签名,顾名思义,就是V1签名并不是Android独有的签名方式,而且在Android还没出来时候,Jar包也是用这种方式进行签名检... 查看详情