图解入门Matplotlib

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

 Matplotlib简单介绍

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

image.gif


    简单的Matplotlib画图

    matplotlib.pyplot模块

    import matplotlib.pyplot as plt

    image.gif

    import matplotlib.pyplot as plt
    x = [1, 2, 3, 4]             # Step 1准备数据
    y = [10, 20, 25, 30]
    fig = plt.figure()             # Step 2创建图形 
    ax = fig.add_subplot(111)     # Step 3绘图
    ax.plot(x, y, color='lightblue', \
      linewidth=3)  # Step 4自定义设置
    ax.scatter([2, 4, 6], [5, 15, 25], \
      color='darkgreen', marker='^')
     ax.set_xlim(1, 6.5)
     plt.savefig('foo.png')       # Step 5保存图形 
    plt.show()                  # Step 6显示图形

    image.gif

    image.gif


    图形绘制流程

    image.gif

    创建画布

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

    image.gif

    import matplotlib.pyplot as plt
    # 创建一个4英寸宽,2英寸高,分辨率为300 dpi的图
    fig = plt.figure(figsize=(4, 2), dpi=300)
    plt.plot()
    plt.show()

    image.gif

    image.gif

    绘制图像

    plt.plot(x, y, 'g--o', markersize=8, markerfacecolor='yellow', linewidth=2)

    image.gif

    线型和标记

    plt.plot(x, y, 'r--o')  # 红色虚线,点标记为圆圈

    image.gif

    线条颜色

    plt.plot(x, y, color='blue')  # 线条颜色为蓝色

    image.gif

    线条宽度

    plt.plot(x, y, linewidth=2)  # 线宽为2

    image.gif

    标记大小和颜色

    plt.plot(x, y, marker='o', markersize=10, markerfacecolor='red', markeredgecolor='black')

    image.gif

    • marker='o' 设置数据点的标记为圆形。
    • markersize=10 设置标记的大小。
    • markerfacecolor='red' 设置标记的填充颜色为红色。
    • markeredgecolor='black' 设置标记的边框颜色为黑色

    标签

    plt.plot(x, y, label='y = x^2')

    image.gif

    显示图像

    # 显示图例
    plt.legend(loc='best')
    # 显示图像
    plt.show()

    image.gif

    综合举例

    import matplotlib.pyplot as plt
    # 创建一个4英寸宽,2英寸高,分辨率为300 dpi的图
    fig = plt.figure(figsize=(4, 2), dpi=300)
    # 数据
    x = [0, 1, 2, 3, 4]
    y = [0, 1, 4, 9, 16]
    # 绘制图像,设置线条样式、颜色和标记,并设置标签
    plt.plot(x, y, 'g--o', markersize=8, markerfacecolor='yellow', linewidth=2, label='y = x^2')
    # 添加标题和标签
    plt.title("Quadratic Plot")
    plt.xlabel("X values")
    plt.ylabel("Y values")
    # 显示图例
    plt.legend(loc='best')
    # 显示图像
    plt.show()

    image.gif

    image.gif


    图形添加辅助功能

       为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用

    需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度

    准备数据并画出初始折线图

    import matplotlib.pyplot as plt
    import random
    # 画出温度变化图
    # 0.准备x, y坐标的数据
    x = range(60)
    y_shanghai = [random.uniform(15, 18) for i in x]  #random.uniform(x, y) 方法将随机生成一个实数,它在 [x,y] 范围内。
    # 1.创建画布
    plt.figure(figsize=(20, 8), dpi=80)
    # 2.绘制折线图
    plt.plot(x, y_shanghai)
    # 3.显示图像
    plt.show()

    image.gif

    添加自定义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])

    image.gif

    中文显示问题解决

    ## 解决中文字符显示不全
    # 设置中文编码和负号的正常显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False

    image.gif

    添加网格显示

    为了更加清楚地观察图形对应的值

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

    image.gif

    添加描述信息

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

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

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

    image.gif

    图像保存

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

    image.gif

    • 注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
    import matplotlib.pyplot as plt
    import random
    from pylab import mpl
    # 设置显示中文字体
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    # 设置正常显示符号
    mpl.rcParams["axes.unicode_minus"] = False
    # 0.准备数据
    x = range(60)
    y_shanghai = [random.uniform(15, 18) for i in x]
    # 1.创建画布
    plt.figure(figsize=(20, 8), dpi=100)
    # 2.绘制图像
    plt.plot(x, y_shanghai)
    # 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])
    # 2.2 添加网格显示
    plt.grid(True, linestyle="--", alpha=0.5)
    # 2.3 添加描述信息
    plt.xlabel("时间")
    plt.ylabel("温度")
    plt.title("中午11点--12点某城市温度变化图", fontsize=20)
    # 2.4 图像保存
    plt.savefig("d:\\test.png")
    # 3.图像显示
    plt.show()

    image.gif

    image.gif


    绘制其它类型的图像

    绘制折线图

    import matplotlib.pyplot as plt
    plt.plot([1,2,5,6,8])
    plt.ylabel('some number')
    plt.show()

    image.gif

    image.gif

    绘制函数曲线

    import numpy as np
    import matplotlib.pyplot as plt
    x1 = np.linspace(-5, 5, 101)
    y1 = np.sin(x1)
    plt.plot(x1, y1)
    plt.show()

    image.gif

    image.gif

    x1 中保存的是为显示 sin 曲线而生成的从 -5 到 5 的 101 个数据。

    y1 中保存的是使用 NumPy 的 sin 函数生成的数据。

    绘制散点图

    x2 = np.arange(100)
    y2 = x2 * np.random.rand(100)
    plt.scatter(x2, y2)

    image.gif

    image.gif

    x2 中保存的是元素为“从 0 到 99 的整数”的数组。

    y2 中保存的是元素为“在从 0 到 1 的范围内随机选出的 100 个数据”的数组与刚才的变量 x2

    相乘的结果。

    绘制直方图

    x2 = np.arange(100)
    y2 = x2 * np.random.rand(100)
    plt.hist(y2, bins=5)

    image.gif

    image.gif

    绘制柱状图

    x2 = np.arange(100)
    y2 = x2 * np.random.rand(100)
    plt.bar(x2, y2)

    image.gif

    image.gif

    绘制箱形图

    image.gif


    Matplotlib的使用

    image.gif

    下面对红酒数据集进行可视化

    加载数据保存在data中

    将要显示的索引为 0 的 alcohol(酒精度)和索引为 9 的 color_intensity(色泽)数据分别赋值 给 x3 和 y3。

    画出散点图

    import matplotlib.pyplot as plt
    from sklearn.datasets import load_wine
    data = load_wine()
    x3 = data.data[:, [0]]
    y3 = data.data[:, [9]]
    plt.scatter(x3, y3)

    image.gif

    image.gif

    下面输出y3的直方图

    plt.hist(y3,bins=5)

    image.gif

    image.gif


    目录
    相关文章
    |
    云栖大会 开发者
    收到阿里云【乘风者计划】博主证书和奖励
    收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
    3292 2
    收到阿里云【乘风者计划】博主证书和奖励
    社区活动礼品兑换攻略
    社区活动礼品兑换攻略
    14807 2
    |
    6天前
    |
    机器学习/深度学习 数据采集 人工智能
    田间杂草检测数据集分享(适用于YOLO系列深度学习分类检测任务)
    本数据集含4000张真实农田图像(小麦/玉米/水稻田),YOLO格式标注杂草目标,覆盖多天气、光照与视角,适用于YOLO系列等目标检测模型训练,助力智能除草与精准农业研究。(239字)
    181 16
    |
    7天前
    |
    人工智能 机器人 芯片
    人工智能|YOLOv8实战
    本内容为安全帽检测实战项目,基于YOLOv8模型,涵盖Kaggle数据获取、自定义yaml配置、模型训练(yolo_train.py)与测试(yolo_test.py),并提供服务器(FastAPI+Docker)、边缘(Jetson+TensorRT)及国产嵌入式(RK3588+RKNN)三类部署方案,支持工业场景实时智能识别。(239字)
    146 1
    |
    14天前
    |
    弹性计算 前端开发 Ubuntu
    阿里云服务器ECS的租用教程和简单的前端页面部署
    本文详解阿里云学生福利领取(含300元卡券)及ECS轻量服务器选购与部署全流程:涵盖学生机免费申领、配置选型建议(Ubuntu/CentOS/Windows)、安全组设置、Nginx安装、网页部署及Xshell远程连接等实操步骤,新手友好。
    222 8
    |
    8月前
    |
    人工智能 vr&ar UED
    获奖公布|第十九届"挑战杯"竞赛2025年度中国青年科技创新"揭榜挂帅"擂台赛阿里云“AI技术助力乡村振兴”专题赛拟授奖名单公示
    获奖公布|第十九届"挑战杯"竞赛2025年度中国青年科技创新"揭榜挂帅"擂台赛阿里云“AI技术助力乡村振兴”专题赛拟授奖名单公示
    |
    4月前
    |
    机器学习/深度学习 人工智能 物联网
    烧显卡不烧钱:学生党个人开发者GPU选购指南,看完不再被割韭菜
    本文为学生与个人开发者量身打造大模型微调硬件选购指南:解析LoRA/QLoRA等高效微调技术如何大幅降低显存需求,对比RTX 3060/3090/4090等显卡的显存、带宽、算力与性价比,提供2000–8000元梯度配置方案,并分享混合精度、梯度累积等显存优化技巧及云资源省钱策略。
    |
    7月前
    |
    机器学习/深度学习 人工智能 缓存
    让AI评测AI:构建智能客服的自动化运营Agent体系
    大模型推动客服智能化演进,从规则引擎到RAG,再到AI原生智能体。通过构建“评估-诊断-优化”闭环的运营Agent,实现对话效果自动化评测与持续优化,显著提升服务质量和效率。
    3286 86
    让AI评测AI:构建智能客服的自动化运营Agent体系
    |
    人工智能 Java 程序员
    《通义灵码2.0 AI 程序员体验官招募》 获奖名单公布
    《通义灵码2.0 AI 程序员体验官招募》 获奖名单公布
    474 1
    |
    人工智能 自然语言处理 API
    【活动系列】在阿里云百炼构建企业级多模态应用,发布作品赢取礼品
    本次活动旨在鼓励开发者围绕AI应用开发实训课中的音视频交互和多模态RAG能力,在实训群内上传智能体效果截图或视频。活动时间为2025年1月22日至3月31日,分为作品提交、评审和结果公布三个阶段。参与者需在阿里云百炼平台上创建应用,并在规定时间内提交作品。奖项设置包括磁吸充电宝、定制保温杯和折叠雨伞等丰厚礼品。所有作品必须为原创,且需使用阿里云百炼平台完成。详细操作指南及注意事项请参见活动页面。
    4362 10