【Python】Matplotlib详解

Matplotlib详解

相关教程

【Python】Numpy详解
【Python】Pandas详解
【Python】Matplotlib详解

一、Matplotlib介绍

数据分析三剑客之一的Matplotlib,是Python中的图形绘图库,即:Python中最常用的数据可视化库之一。它提供了丰富的绘图功能,使得用户可以轻松地创建各种类型的图表和可视化数据。

二、Matplotlib的安装及导入

  • Matplotlib安装:在终端处输入以下命令

    pip install matplotlib
    
  • Matplotlib导入:大多数Matplotlib实用程序位于PyPlot子模块下,因此导入库格式:

    import matplotlib.pyplot as plt
    

三、plot()函数介绍

plot()函数的基本格式plt.plot(x, y, format_string, **kwargs)

  • xy:【必要参数】,分别是横坐标和纵坐标的数据,可以是列表、数组等可迭代对象。如果只提供y,则x默认是从0开始的整数序列。
  • format_string:【可选参数】,用于指定线条的格式,包括颜色、线型、标记等。例如,'r-'表示红色实线,'bo'表示蓝色圆点标记。
  • **kwargs:【可选参数】,用于更详细地设置线条的属性,如线宽、标记大小、颜色等。

在实际应用中,常见的参数类型主要有以下几种【额外配置】:

  • color:设置线条颜色,默认为蓝色。

  • linestyle:设置线条样式,默认为实线。

  • marker:设置数据点的符号【标记】,默认为圆形

    注意:可以添加ms参数表示标记的大小,mec参数表示标记的颜色。

    如:plt.plot(x,y,marker=‘*’,ms=20,mec=“r”),【表示标记为星形,标记颜色为红色,标记大小为20】

  • linewidth:设置线条宽度,默认为1.0。

1)标记参数

一般用marker参数进行配置标记

符号标记类型
“o”圆形
“*”星形
“.”像素点
“,”像素点,比'.'更小
“x”叉号
“X”实心叉号
“+”加号
“P”实心加号
“s”正方形
“D”菱形
“d”瘦菱形
“p”五边形
“h”六边形
“^”上三角形
“v”下三角形
“<”左三角形
“>”右三角形
“1”下三角(另一种样式)
“2”上三角(另一种样式)
“3”左三角(另一种样式)
“4”右三角(另一种样式)
“l”垂直线
“_”水平线
2)线颜色参数

一般用color参数进行配置颜色

符号颜色
“r”红色
“g”绿色
“b”蓝色
“y”黄色
“c”青色
“m”品红色
“k”黑色
“w”白色
2)线条样式参数

一般用linestyle参数进行配置线条样式

符号线条类型
“-”实线
“–”虚线
“-.”点划线
“:”点线

四、常用汇总

4.1:函数总结

Matplotlib在绘制图形时,其最常用的场景:绘制点绘制线

方法名说明
plt.plot()绘制线性图表
plt.show()显示图表
plt.title()设置总标题(图表名称)
含有loc参数定位标题位置【标题】(left|right)
plt.xlabel()设置x轴名称【标签】
plt.ylabel()设置y轴名称【标签】
plt.text()添加文本内容
如:plt.text(200,250,"y=x"),表明在(200,250)出添加y=x 标记
plt.grid()显示网格
axis参数,其中axis='x’表明显示竖线,axis='y’表明显示横线
plt.legend()显示图列
plt.xticks()设置 x 轴刻度

4.2:中文字的配置项

可以通过以下【固定】配置来实现中文字的显示

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

字体说明

中文字体说明
‘SimHei’中文黑体
‘Kaiti’中文楷体
‘LiSu’中文隶书
‘FangSong’中文仿宋
‘YouYuan’中文幼圆
STSong华文宋体

五、绘图操作

1)直线图

1.1:一般直线图

此处,我们将绘制一条从(0,6)至(0,250)的线。

# 1. 导入必要的库
import matplotlib.pyplot as plt
import numpy as np

# 2. 定义坐标数据
# 从位置 (0,0) 至位置 (6,250) 处绘画一条线
x=np.array([0,6]) # x轴:0~6
y=np.array([0,250]) # y轴:0~250

# 3. 绘制线
plt.plot(x,y)

# 4. 显示图表
plt.show()
1.2:直线图【额外配置】

在上述直线的基础上进行一些额外的配置线颜色为红色,线条样式为点线,标记【点】为星型

# 1. 导入必要的库
import matplotlib.pyplot as plt
import numpy as np

# 2. 定义坐标数据
# 从位置 (0,0) 至位置 (6,250) 处绘画一条线
x=np.array([0,6]) # x轴:0~6
y=np.array([0,250]) # y轴:0~250

# 3. 绘制线
# 额外配置【可选】:颜色为红色,线条样式为点线,标记【点】为星型
plt.plot(x,y,color="r",linestyle=":",marker="*")

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

2)曲线图

import matplotlib.pyplot as plt
import numpy as np

# 2. 定义坐标数据
x=np.arange(-10,11) # x轴:从-10~10(不包含11)
y= x**2 # y轴:关于x的二元一次函数

# 3. 绘制线
plt.plot(x,y)
# 4. 显示图表
plt.show()

3)折线图

3.1:一般折线图

绘制折线图,先从位置(1,3)到(2,8),然后到(6,1),最后到(8,10)。

# 导入必要的库
import matplotlib.pyplot as plt
import numpy as np

# 定义坐标数据
x=np.array([1,2,6,8]) # x轴
y=np.array([3,8,1,10]) # y轴

plt.plot(x,y) # 绘制线
plt.show() # 显示图表
3.2:折线图【标题与标签】

当我们需要显示中文标签时,需要添加:plt.rcParams['font.sans-serif'] = ['KaiTi']进行中文配置。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

# 定义坐标数据
x=np.array([80,85,90,95,100,105,110,115,120])
y=np.array([240,270,280,290,290,310,305,315,320])

plt.title("运动数据",loc="left") # 设置总标题(左对齐)
plt.xlabel("平均脉搏") # 设置x轴名称
plt.ylabel("卡路里消耗量") # 设置y轴名称

plt.plot(x,y) # 绘制线
plt.show() # 显示图表

4)无线图(点)【不推荐】

注意:【不推荐】此处的用法,通常使用散点图进行表示。

import matplotlib.pyplot as plt
import numpy as np

x=np.array([80,85,90,95,100,105,110,115,120])
y=np.array([240,270,280,290,290,310,305,315,320])

# 使用快捷字符串符号参数"o",表示“环”
plt.plot(x,y,'o')
plt.grid() # 显示网格
plt.show()

5)多表图

5.1:基本写法

通过subplot()函数,可以在一张图中绘制多个图。

subplot()函数

subplot()函数采用3个参数来描述图形的布局。

基本格式subplot(nrows, ncols, index, **kwargs)

参数讲解nrowsncols分别表示子图的【行数】和【列数】index表示子图的位置索引,从左上角开始,从左到右、从上到下依次计数。

例如:subplot(2, 2, 1)表示在一个 2 行 2 列的子图布局中创建第一个子图。

此处,我们绘制一个一行两列的多表图形,具体代码如下:

import matplotlib.pyplot as plt
import numpy as np

# 1、plot1
x=np.array([0,1,2,3])
y=np.array([3,8,1,10])
# 图有一行两列, 该子图是【第一个图】
plt.subplot(1,2,1)
plt.plot(x,y)

# 2、plot2
x=np.array([0,1,2,3])
y=np.array([10,20,30,40])
# 图有一行两列, 该子图是【第二个图】
plt.subplot(1,2,2)
plt.plot(x,y)

plt.show() # 显示图表
5.2:标题与大标题

可以使用title()函数每个子图添加标题;使用suptitle()函数整个多表图行添加大标题

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置显示中文字体
plt.rcParams['axes.unicode_minus'] = False  # 设置正常显示符号

# 1、plot1
x=np.array([0,1,2,3])
y=np.array([3,8,1,10])
# 图有一行两列, 该子图是【第一个图】
plt.subplot(1,2,1)
plt.plot(x,y)
plt.title("跑步数据") # 显示子图标题

# 2、plot2
x=np.array([0,1,2,3])
y=np.array([10,20,30,40])
# 图有一行两列, 该子图是【第二个图】
plt.subplot(1,2,2)
plt.plot(x,y)
plt.title("游泳数据") # 显示子图标题

plt.suptitle("我的运动") # 显示大标题
plt.show() # 显示图表

6)散点图

绘制散点图时,通常依赖plt.scatter()函数,该函数包含很多参数,具体如下:

  • s参数:点的大小
  • color|c参数:点的颜色,取值可以为[‘b’, ‘c’, ‘g’, ‘k’, ‘m’, ‘r’, ‘w’, ‘y’]
  • alpha参数:点的透明度,取值为0~1
  • marker参数:点的形状,默认状态下为“o”,常见的还有[‘v’, ‘>’, ‘<’, ‘*’, ‘s’, ‘p’, ‘h’, ‘x’, ‘+’]
import matplotlib.pyplot as plt
import numpy as np

# 定义坐标数据
x=np.array([5,3,6,1,4,2,7,9,8,13])
y=np.array([32,4,52,56,13,134,98,87,107,119])

# 绘制散点图(颜色为蓝色,大小为50,透明度为0.5)
plt.scatter(x,y,c="b",s=50,alpha=0.5)

# 显示图表
plt.show()

7)柱状图

我们一般通过plt.bar()函数来绘制柱状图。

基本格式np.bar(x, y, width, bottom=None, *, align=‘center’, data=None, **kwargs)

参数说明
xx轴的数据序列
yy轴的数据序列
color柱状图填充的颜色
edgecolor图形边缘颜色
width柱状图的宽度(0~1)【默认0.8】,应用于垂直柱状图
barth柱状图的高度(0~1),应用于水平柱状图,类比修改垂直柱状图的宽度
label解释每个图形代表的含义
  • 一般的柱形图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 定义坐标数据
    x=np.array(['A','B','C','D'])
    y=np.array([23,9,4,17])
    
    # 绘制柱状图
    plt.bar(x,y)
    
    # 显示图表
    plt.show()
    
  • 柱状图头部添加数据

    import matplotlib.pyplot as plt
    import numpy as np
    
    x=np.array(['A','B','C','D'])
    y=np.array([23,9,4,17])
    
    bars=plt.bar(x,y)
    
    # 在每个柱子顶部添加数据【固定写法】
    for bar in bars:
        height = bar.get_height() # 获取柱子高度
        # 在柱子顶部添加文本
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    
    plt.show()
    
  • 并行柱状图

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 1、定义两组数据的类别标签
    x = np.array(['A', 'B', 'C', 'D'])
    # 第一组数据
    y1 = np.array([23, 9, 4, 17])
    # 第二组数据
    y2 = np.array([15, 10, 8, 12])
    
    # 2、设置柱子宽度
    bar_width = 0.36
    # 3、设置两组柱子的位置偏移量
    index = np.arange(len(x))
    
    # 3、绘制柱子
    # 绘制第一组柱子
    bars1 = plt.bar(index, y1, width=bar_width, label='Group 1')
    # 绘制第二组柱子,通过调整位置实现并排
    bars2 = plt.bar(index + bar_width, y2, width=bar_width, label='Group 2')
    
    # 在柱子顶部添加数据【固定写法】
    # 针对第一组柱子
    for bar in bars1:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    # 针对第二组柱子
    for bar in bars2:
        height = bar.get_height()
        plt.text(bar.get_x() + bar.get_width() / 2, height,
                 str(height), ha='center', va='bottom')
    
    # 4、添加轴标签(x轴)
    plt.xticks(index + bar_width / 2, x)
    # 显示图列
    plt.legend()
    
    plt.show()
    
  • 水平柱状图

    bar()函数修改为barh()函数,并将其中的width参数改为height参数

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 1、定义两组数据的类别标签
    x = np.array(['A', 'B', 'C', 'D'])
    y1 = np.array([23, 9, 4, 17]) # 第一组数据
    y2 = np.array([15, 10, 8, 12]) # 第二组数据
    
    # 2、设置柱子宽度
    bar_width = 0.36
    # 3、设置两组柱子的位置偏移量
    index = np.arange(len(x))
    
    # 3、绘制柱子
    # 绘制第一组柱子
    bars1 = plt.barh(index, y1, height=bar_width, label='Group 1')
    # 绘制第二组柱子,通过调整位置实现并排
    bars2 = plt.barh(index + bar_width, y2, height=bar_width, label='Group 2')
    
    # 4、添加轴标签(y轴)
    plt.yticks(index + bar_width / 2, x)
    # 显示图列
    plt.legend()
    
    plt.show()
    

8)直方图

在绘制直方图时,一般用plt.hist()函数来创造直方图。

基本格式plt.hist(x, bins=bins, color=”b”, histtype=’bar’,label=’label’, rwidth =rwidth)

具体各参数说明如下:

参数说明
x连续型数据的输入值
color柱体的颜色
label图例内容
rwidth柱体宽度
histtype柱体类型
bins用于确定柱体的个数或是柱体边缘范围

具体写法如下

import matplotlib.pyplot as plt
import numpy as np

# 通过Numpy随机生成一个包含250个值的数组,其中值将集中在170,标准差为10
x=np.random.normal(170,10,250)

# 生成直方图
plt.hist(x)

# 显示图表
plt.show()

9)饼图

一般用plt.pie()函数来创造饼图。

基本格式plt.pie(size,explode,labels,autopct,startangle,shadow,color) 函数

具体各参数说明如下:

参数说明
size各部分的百分比
labels每部分饼片的文本标签
colors设置每个柱体的颜色
shadow是否绘制饼片的阴影【True|False】
startangle起始角度,即:第一个饼片逆时针旋转的角度
autopct每部分饼片对应的数值百分比样式,固定形式:autopct="%1.1f%%"
explode分离程度,即:设置距离圆心的距离【可视化】
  • 一般饼图

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    plt.pie(size,labels=labels)
    
    plt.legend() # 图列
    plt.show() # 显示图表
    
  • 显示百分比样式饼图

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    # 起始角度为90度,显示百分比样式
    plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90)
    
    plt.legend() # 图列
    plt.show() # 显示图表
    
  • 强调某几部分饼片的可视性(explode)

    import matplotlib.pyplot as plt
    import numpy as np
    
    labels=["Apples","Oranges","Bananas","Peaches"] # 标签
    size=np.array([35,25,25,15]) # 各部分的百分比
    
    # 起始角度为90度,显示百分比样式,添加阴影,分离程度【可视化】
    # 分离程度【可视化】:0表示不分离,0.2表示一定的分离
    plt.pie(size,labels=labels,autopct="%1.1f%%",startangle=90,
            shadow=True, explode = [0.2,0,0.2,0])
    
    plt.legend() # 图列
    plt.show() # 显示图表
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值