机器学习入门-01快速学会使用Matplotlib绘图

快速学会使用Matplotlib绘图

  • 使用Matplotlib的基本功能实现图形显示
  • 使用Matplotlib实现多图显示
  • 使用Matplotlib实现不同画图种类

在这里插入图片描述


1. Matplotlib之HelloWorld

1.1 什么是Matplotlib

  • Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

  • Matplotlib 可以用来绘制各种静态,动态,交互式的图表。

  • Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。

  • Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。

总言而之:Matplotlib是专门用于开发2D图表(包括3D图表)和以渐进、交互式方式实现数据可视化的科学计算库

2. 为什么要学习Matplotlib

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

Matplotlib能将数据进行可视化,更直观的呈现
使数据更加客观、更具说服力

例如下面两个图为数字展示和图形展示:

在这里插入图片描述

3. Pyplot介绍

3.1 什么是Pyplot

Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。Pyplot 是Matplotlib中常用的绘图模块,能很方便让用户绘制 2D 图表。

Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。

3.2 Pyplot子库的使用

在使用的时候,我们使用 import 导入 pyplot 库,并习惯设置一个别名 :plt

例如

import matplotlib.pyplot as plt

这样我们就可以通过使用 plt 来引用 Pyplot 包的方法来进行绘图

4. 以折线图为例-用Matplotlib画一个简单的图

4.1 图形的绘制流程

1).创建画布 – plt.figure()

plt.figure(figsize=(), dpi=)
参数:
	figsize:指定图的长宽
	dpi:图像的清晰度
	返回fig对象

2).绘制图像 – plt.plot(x, y)

# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)

参数说明:

  • x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。

  • fmt:可选,定义基本格式(如颜色、标记和线条样式)。

  • **kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。

3).显示图像 – plt.show()

4).保存图像 – plt.savefig()

注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。

4.2 折线图绘制与显示

举例:展现深圳一周的天气,比如从星期一到星期日的天气温度如下

import matplotlib.pyplot as plt

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)

# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [31,32,18,25,29,31,18])

# 3.显示图像
plt.show()

# 4.保存图片到指定路径
plt.savefig("test.png")

在这里插入图片描述

以上实例中我们使用了 Pyplot 的 plot() 函数, plot() 函数是绘制二维图形的最基本函数。

5. Matplotlib图像结构

在这里插入图片描述

6. 给图形添加辅助功能

首先准备数据画出一个基本的折线图

import matplotlib.pyplot as plt
import random

# 画出温度变化图

# 0.准备x, y坐标的数据
x = range(60)
y_s = [random.uniform(15, 18) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 2.绘制折线图
plt.plot(x, y_s)

# 3.显示图像
plt.show()

在这里插入图片描述

1)添加自定义x,y刻度

我们可以使用 xlabel() 和 ylabel() 方法来设置 x 轴和 y 轴的标签

  • plt.xticks(x, **kwargs)

    x:要显示的刻度值

  • plt.yticks(y, **kwargs)

    y:要显示的刻度值

增加以下两行代码

# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)

# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

在这里插入图片描述

2)添加标题

使用 title() 函数来设置

增加以下代码

plt.title("某城市温度变化图")

3)添加网格显示

为了更加清楚地观察图形对应的值,使用 pyplot 中的 grid() 方法来设置图表中的网格线

语法如下

grid(color = 'color', linestyle = 'linestyle', linewidth = number)

参数说明

  • color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。

  • linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。

  • linewidth:设置线的宽度,可以设置一个数字。

增加以下代码

plt.grid(True, linestyle='--', alpha=0.5)

在这里插入图片描述

4)添加描述信息

添加x轴、y轴描述信息及标题

# 通过fontsize参数可以修改图像中字体的大小

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)

在这里插入图片描述

以上功能的完整代码

import random

# 画出温度变化图

# 0.准备x, y坐标的数据
x = range(60)
y_s = [random.uniform(15, 18) for i in x]

# 1.创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 2.绘制折线图
plt.plot(x, y_s)

# 增加以下两行代码

# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)

# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

#3.添加标题
plt.title("某城市温度变化图")

#4.添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")

plt.grid(color = 'r', linestyle='--', alpha=0.7)

# 4.显示图像
plt.show()

7. 在一个坐标系中绘制多个图像

1)多次plot

plot() 方法中可以包含多对 x,y 值来绘制多条线

# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]

# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')

效果:
在这里插入图片描述

2)设置图形风格

在这里插入图片描述

3) 显示图例

# 绘制折线图
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

# 显示图例
plt.legend(loc="best")

注意:如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来

8.多个坐标系显示— plt.subplots

可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图

subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可

创建一个带有多个axes(坐标系/绘图区)的图

matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 

参数说明:

nrows, ncols : 设置有几行几列坐标系
int, optional, default: 1, Number of rows/columns of the subplot grid.

Returns:
fig : 图对象
axes : 返回相应数量的坐标系

设置标题等方法不同:
set_xticks
set_yticks
set_xlabel
set_ylabel

注意:plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法。

  # 0.准备数据
    x = range(60)
    y_shanghai = [random.uniform(15, 18) for i in x]
    y_beijing = [random.uniform(1, 5) for i in x]
    
    # 1.创建画布
    # plt.figure(figsize=(20, 8), dpi=100)
    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
    
    
    # 2.绘制图像
    # plt.plot(x, y_shanghai, label="上海")
    # plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
    axes[0].plot(x, y_shanghai, label="上海")
    axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
    
    # 2.1 添加x,y轴刻度
    # 构造x,y轴刻度标签
    x_ticks_label = ["11点{}分".format(i) for i in x]
    y_ticks = range(40)
    
    # 刻度显示
    # plt.xticks(x[::5], x_ticks_label[::5])
    # plt.yticks(y_ticks[::5])
    axes[0].set_xticks(x[::5])
    axes[0].set_yticks(y_ticks[::5])
    axes[0].set_xticklabels(x_ticks_label[::5])
    axes[1].set_xticks(x[::5])
    axes[1].set_yticks(y_ticks[::5])
    axes[1].set_xticklabels(x_ticks_label[::5])
    
    # 2.2 添加网格显示
    # plt.grid(True, linestyle="--", alpha=0.5)
    axes[0].grid(True, linestyle="--", alpha=0.5)
    axes[1].grid(True, linestyle="--", alpha=0.5)
    
    # 2.3 添加描述信息
    # plt.xlabel("时间")
    # plt.ylabel("温度")
    # plt.title("中午11点--12点某城市温度变化图", fontsize=20)
    axes[0].set_xlabel("时间")
    axes[0].set_ylabel("温度")
    axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
    axes[1].set_xlabel("时间")
    axes[1].set_ylabel("温度")
    axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
    
    # # 2.4 图像保存
    plt.savefig("./test.png")
    
    # # 2.5 添加图例
    # plt.legend(loc=0)
    axes[0].legend(loc=0)
    axes[1].legend(loc=0)
    
    
    # 3.图像显示
    plt.show()

在这里插入图片描述

9.常见图形的API

1)折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

api:plt.plot(x, y)

在这里插入图片描述

2)散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

api:plt.scatter(x, y)

在这里插入图片描述

3) 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。

特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

api:plt.bar(x, width, align='center', **kwargs)

参数说明:
x : 需要传递的数据

width : 柱状图的宽度

align : 每个柱状图的位置对齐方式
{‘center’, ‘edge’}, optional, default: ‘center’

**kwargs :
color:选择柱状图的颜色

在这里插入图片描述

4) 直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。

特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

api:matplotlib.pyplot.hist(x, bins=None)

参数说明:
x : 需要传递的数据
bins : 组距

在这里插入图片描述

5) 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

特点:分类数据的占比情况(占比)

api:plt.pie(x, labels=,autopct=,colors)

参数说明:  
x:数量,自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色

在这里插入图片描述

参考

https://www.runoob.com/matplotlib/matplotlib-scatter.html

https://matplotlib.org/index.html

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>