matplotlib 入门教程

一. matplotlib 简介

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。

Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。 只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等。

二. matplotlib 画图常见属性
1. 线条属性
  1. color:颜色

    ‘b’blue
    ‘g’green
    ‘y’yellow
    ‘r’red
    ‘w’white
    ‘k’black
  2. linestyle:线条风格

    ‘-’solid line style
    ‘–’dashed line style
    ‘-.’dash-dot line style
    ‘:’dotted line style
  3. linewidth:线宽

  4. marker:标记

    ‘.’point marker
    ‘,’pixel marker
    ‘o’circle marker
    ‘v’triangle_down marker
    import numpy as np
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        fig = plt.figure(figsize= (6,4))
        ax = fig.add_subplot()
        x = np.linspace(-10, 10, 200)
        y = np.sin(x)
    
        ax.plot(x,y, color = 'r', linewidth = 1, linestyle = '-', marker = 'o')
        plt.show()
    

    运行结果:
    在这里插入图片描述

2. 坐标轴刻度,坐标轴范围,坐标轴标签和图例
  1. 坐标轴刻度和范围

    • set_xticks:设置x轴刻度
    • set_yticks:设置y轴刻度
    • set_xlim:设置x轴范围
    • set_ylim:设置y轴范围
    import numpy as np
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        fig = plt.figure(figsize= (6,4))
        ax = fig.add_subplot()
        x = np.linspace(-10, 10, 200)
        y = np.sin(x)
    
        ax.plot(x,y)
    
        ax.set_xticks(np.arange(-10, 11, 1))
        ax.set_yticks(np.arange(-2, 3, 1))
        ax.set_xlim(-10, 10)
        ax.set_ylim(-2, 2)
        plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 坐标轴标签和图例

    • set_xlabel:设置x轴标签
    • set_xlabel:设置y轴标签
    • plot方法的label属性可以设置图例
    • legend:显示图例
    import numpy as np
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        fig = plt.figure(figsize= (6,4))
        ax = fig.add_subplot()
        x = np.linspace(-10, 10, 200)
        y1 = np.sin(x)
        y2 = np.cos(x)
    
        ax.plot(x,y1, label = 'sin')
        ax.plot(x, y2, label = 'cos')
    
        ax.set_xlabel("x")
        ax.set_ylabel("y")
        ax.legend()
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

3. 文本和注释
  1. text:设置文本

    import numpy as np
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        fig = plt.figure(figsize= (6,4))
        ax = fig.add_subplot()
        x = np.linspace(-10, 10, 200)
        y = np.sin(x)
    
        ax.plot(x, y)
        ax.set_ylim(-2, 3)
        ax.text(x = 0, y = 1.5, s = 'text')
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

  2. annotate:设置注释

    import numpy as np
    import matplotlib.pyplot as plt
    
    if __name__ == '__main__':
        fig = plt.figure(figsize= (6,4))
        ax = fig.add_subplot()
        x = np.linspace(-10, 10, 200)
        y = np.sin(x)
    
        ax.plot(x, y)
        ax.set_ylim(-2, 3)
        ax.annotate('zero_point', xy = (0, 0), xytext = (0, 1), arrowprops= {
            'headwidth':4,
            'width':2
        })
    
        plt.show()
    

    运行结果:
    在这里插入图片描述

三. matplotlib 绘制多个子图

matplotlib的图像位于Figure对象中,空的Figure对象不能绘图,还需要在Figure对象上添加子图才能真正绘图,matplotlib中提供了两种方法可以添加子图。

1. add_subplot
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    fig = plt.figure(figsize= (6,4))
    ax1 = fig.add_subplot(2, 2, 1)
    ax2 = fig.add_subplot(2, 2, 2)
    ax3 = fig.add_subplot(2, 2, 3)
    ax4 = fig.add_subplot(2, 2, 4)

    x = np.linspace(-10, 10, 200)
    y1 = np.sin(x)
    y2 = np.cos(x)
    y3 = np.tan(x)
    y4 = 2 * x + 10

    ax1.plot(x, y1)
    ax2.plot(x, y2)
    ax3.plot(x, y3)
    ax4.plot(x, y4)

    plt.show()

运行结果:
在这里插入图片描述

2. subplots
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    fig,axes = plt.subplots(2, 2, figsize= (6,4))
    x = np.linspace(-10, 10, 200)
    y = np.sin(x)

    for i in range(0, 2):
        for j in range(0, 2):
            axes[i][j].plot(x,y)

    plt.show()

运行结果:
在这里插入图片描述

四. matplotlib 绘制常见图形
1. 折线图

将每个数据点连接起来就构成折线图,折线图可以直观显示数据的值和变化趋势。

import numpy as np
import matplotlib.pyplot as plt

#中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


if __name__ == '__main__':
    fig = plt.figure(figsize=(15, 8))
    ax = fig.add_subplot()

    x = np.linspace(-10, 10, 200)
    y = np.sin(x)

    ax.plot(x, y, label='sin')
    ax.legend()

    plt.show()

运行结果:
在这里插入图片描述

2. 散点图

散点图一般用于分析两个变量之间是否存在某种关联。

import numpy as np
import matplotlib.pyplot as plt

#中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


if __name__ == '__main__':
    fig = plt.figure(figsize=(15, 8))
    ax = fig.add_subplot()

    x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
         163.56, 120.06, 207.83, 342.75, 147.9, 53.06, 224.72, 29.51,
         21.61, 483.21, 245.25, 399.25, 343.35]
    y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9, 239.34,
         140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1,
         30.74, 400.02, 205.35, 330.64, 283.45]

    ax.scatter(x, y)
    plt.show()

运行结果:
在这里插入图片描述

2. 直方图

直方图由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用来展示数据的分布。

import numpy as np
import matplotlib.pyplot as plt

#中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


if __name__ == '__main__':
    fig = plt.figure(figsize=(15, 8))
    ax = fig.add_subplot()

    students_score = [22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27, 67]
    ax.hist(students_score, bins=[0, 20, 40, 60, 80, 100], density=True)
    ax.set_xlabel("分数")
    ax.set_ylabel("数量")
    ax.set_xticks([0, 20, 40, 60, 80, 100])

    plt.show()

运行结果:
在这里插入图片描述

3. 柱状图

柱状图使用柱状显示数据,能够一眼看出各个数据的大小,比较数据之间的差别。

import numpy as np
import matplotlib.pyplot as plt

#中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


if __name__ == '__main__':
    fig = plt.figure(figsize=(15, 8))
    ax = fig.add_subplot()

    movie_name = ['雷神3:诸神黄昏', '正义联盟', '东方快车谋杀案', '寻梦环游记', '全球风暴', '降魔传',
                  '追捕', '七十七天', '密战', '狂兽', '其它']

    # 横坐标
    x = range(len(movie_name))
    # 票房数据
    y = [73853, 57767, 22354, 15969, 14839, 8725, 8716, 8318, 7916, 6764, 52222]

    ax.bar(x, y, width=0.5, color=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g', 'b'])
    ax.set_xticks(x, movie_name, fontsize=10)

    plt.show()

运行结果:
在这里插入图片描述

4. 饼图

饼图由不同类别数据所占的比例构成,一般用来展示不同类别的数据所占总体的比例。

import numpy as np
import matplotlib.pyplot as plt

#中文格式
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


if __name__ == '__main__':
    fig = plt.figure(figsize=(15,8))
    ax = fig.add_subplot()

    data = [23, 17, 35, 29, 12]
    data_label = ['C', 'C++', 'Java', 'Python', 'PHP']

    ax.pie(data, labels=data_label, autopct='%1.2f%%', colors=['red', 'blue', 'yellow', 'green', 'orange'])

    plt.show()

运行结果:
在这里插入图片描述

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值