• 【人工智能】【Python】Matplotlib基础


    Maplotlib

    本文档由萌狼蓝天写于2022年7月24日

    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False  # 正常显示负号
    

    (一)Matplotlib三层结构

    • 容器层
      • canvas
      • figure
      • axes
    • 辅助显示层
      • 添加x轴、y轴描述,标题等内容
    • 图像层
      • 绘制什么图像的声明

    (二)画布创建、图像绘制、图像显示

    # 创建画布
    plt.figure()
    x = [1,2,3,4,5] # x轴上数据
    y = [3,5,8,13,21] # y轴上数据
    plt.plot(x,y) # 绘制图像
    plt.show() # 显示图像
    

    png

    (三)图像画布设置、图像保存

    # 创建画布
    plt.figure(figsize=(10,5),dpi=360)
    # figsize设置宽高(物理),dpi设置像素(清晰度)。
    # 上述语句 返回的是一个fig对象
    # 【注意】plt.show() 会释放figure资源,如果在线上图像之后保存图片将只能保存空图片
    x = [1,2,3,4,5] # x轴上数据
    y = [3,5,8,13,21] # y轴上数据
    
    plt.plot(x,y) # 绘制图像
    plt.savefig("auto_create_test01.jpg") # 保存图像
    
    plt.show() # 显示图像
    

    png

    import random
    x = range(100)
    y_a = [random.uniform(0,30) for i in x]
    # 生成数的数量对应x,生成数的值为0-30之间的随机数
    
    print(x)
    print("---华丽的分割线---")
    print(y_a)
    
    range(0, 100)
    ---华丽的分割线---
    [12.982672509679087, 4.148460810792916, 23.28235249294327, 21.87989699514037, 2.769903367325226, 25.81845792348358, 3.54269402963334, 2.585603726507065, 26.353567263372167, 20.1724515831709, 9.846906537087849, 18.642794021897725, 28.003744340329156, 16.872567782729124, 21.612800689540776, 11.990215915808118, 17.191944072247612, 14.599968428883773, 8.928751599348555, 28.84921690440148, 1.5811419916444414, 28.347437767253062, 4.1844970314337395, 1.4484554776084402, 23.746856993211154, 25.215123023800903, 8.308284357407098, 20.905033782595766, 1.7060361916369626, 25.824999733060757, 25.861418590294413, 18.934895151240344, 29.156472327174725, 19.73204522971468, 27.62189040636267, 4.0745889532346355, 0.8561484814978759, 16.990698526758948, 13.695538355532968, 19.102876219033302, 26.73750193106295, 8.874796595298546, 19.63252230758577, 5.410863374583021, 28.959501437890072, 13.141025987347465, 11.963738613483583, 10.134532811707164, 2.4713136683034986, 26.003968284802426, 14.971877506465844, 14.571620590922555, 29.08039067376321, 2.2940372824311894, 8.146485905161393, 0.7551511667468636, 25.783877538176437, 19.827089802343014, 6.316807614490154, 12.191817760896198, 29.265434441425686, 1.4430630147755286, 27.15559634706954, 25.33537321637355, 14.537826820603485, 14.752792676788385, 1.8704608188174754, 13.895073232049324, 22.79035528366605, 11.12232898307558, 5.16784304566163, 22.837175426537577, 4.0677013250654435, 27.975154486709634, 3.286664382643265, 10.632525108000943, 4.411311190562859, 10.723165062794324, 29.44814886086931, 20.408896064347594, 15.803205938537028, 16.523604028883916, 19.623136101583274, 4.321189078434246, 29.106159249131583, 10.836444462865161, 7.254473087449349, 2.884588234408815, 13.263596148346446, 17.293710076942403, 21.826173895085446, 29.465860746443976, 21.558510008254462, 13.979606990999239, 23.065135048263528, 6.406772645073375, 17.224958179811374, 23.067953124213787, 29.055332612173245, 0.046758792875690736]
    
    plt.figure(figsize=(10,5),dpi=300)# 创建画布
    plt.plot(x,y_a) # 绘画
    plt.show() # 显示
    

    png

    (四)自定义x、y轴的刻度

    • plt.xticks(x,**kwargs) # x 表示要刻度的值
    • plt.yticks(y,**kwargs) # y 表示要刻度的值
    
    x = range(100)
    y_a = [random.uniform(0,50) for i in x]
    
    plt.figure(figsize=(25,5),dpi=300)# 创建画布
    plt.plot(x,y_a) # 绘画
    
    # 构造x轴刻度标签
    x_ticks_label = ["零点{}分".format(i) for i in x]
    # 构造y轴刻度
    y_ticks = range(60)
    # 修改x、y轴刻度显示
    plt.xticks(x[::5],x_ticks_label[::5])
    plt.yticks(y_ticks[::5])
    # ::5 意味着 从头到尾 每间隔5取
    #【注意】第一个参数必须是数字,如果不是数字需要进行值的替换
    
    plt.show()
    

    png

    (五)添加网格显示

    
    x = range(100)
    y_a = [random.uniform(0,50) for i in x]
    
    plt.figure(figsize=(25,5),dpi=300)# 创建画布
    plt.plot(x,y_a) # 绘画
    
    # 构造x轴刻度标签
    x_ticks_label = ["零点{}分".format(i) for i in x]
    # 构造y轴刻度
    y_ticks = range(60)
    # 修改x、y轴刻度显示
    plt.xticks(x[::5],x_ticks_label[::5])
    plt.yticks(y_ticks[::5])
    # ::5 意味着 从头到尾 每间隔5取
    #【注意】第一个参数必须是数字,如果不是数字需要进行值的替换
    
    plt.grid(True,linestyle="--",alpha=0.5) # 添加网格
    # 第一个参数(boolean) 是否添加
    # 第二个参数(linestyle) 曲线还是直线
    # 第三个参数 (alpha)透明度
    
    plt.show()
    

    png

    (六)添加描述信息、一图多线、显示图例

    
    x = range(50)
    y_a = [random.uniform(0,50) for i in x]
    y_b = [random.uniform(0,50) for i in x]
    plt.figure(figsize=(10,5),dpi=300)# 创建画布
    plt.plot(x,y_a) # 绘画
    plt.plot(x,y_b) # 绘画
    x_ticks_label = ["零点{}分".format(i) for i in x]
    y_ticks = range(60)
    plt.xticks(x[::5],x_ticks_label[::5])
    plt.yticks(y_ticks[::5])
    plt.grid(True,linestyle="--",alpha=0.5) # 添加网格
    
    
    # 添加描述
    plt.title("Just Play",fontsize=24)
    plt.xlabel("时间")
    plt.ylabel("温度")
    
    # 显示图例
    
    plt.plot(x,y_a,color="r",linestyle="-",label="A") # 绘画
    plt.plot(x,y_b,color="b",linestyle="--",label="B") # 绘画
    plt.legend(loc="upper right")# 显示图例必须在绘制时设置好
    plt.show()
    

    png

    图例图形风格设置参考表

    颜色字符对应颜色
    r 红色
    g 绿色
    b 蓝色
    w 白色
    c 青色
    m 洋红色
    y 黄色
    k 黑色
    风格字符对应风格
    - 实线
    -- 虚线
    -. 点划线
    : 点虚线
    '' 留空、空格

    (七)多坐标系绘制

    
    x = range(50)
    y_a = [random.uniform(0,50) for i in x]
    y_b = [random.uniform(0,50) for i in x]
    # plt.figure(figsize=(10,5),dpi=300)# 创建画布
    fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,5),dpi=300)
    
    
    x_ticks_label = ["零点{}分".format(i) for i in x]
    y_ticks = range(60)
    
    # 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[1].set_xticks(x[::5])
    axes[1].set_yticks(y_ticks[::5])
    axes[1].set_xticklabels(x_ticks_label[::5])
    
    # 添加描述
    # plt.title("Just Play",fontsize=24)
    axes[0].set_title("Just Play A",fontsize=24)
    axes[1].set_title("Just Play B",fontsize=24)
    # plt.xlabel("时间")
    # plt.ylabel("温度")
    axes[0].set_ylabel("摄氏度")
    axes[1].set_ylabel("华氏度")
    axes[0].set_xlabel("21日数据")
    axes[1].set_xlabel("22日数据")
    
    
    # 显示图例
    
    # plt.plot(x,y_a,color="r",linestyle="-",label="A") # 绘画
    # plt.plot(x,y_b,color="b",linestyle="--",label="B") # 绘画
    axes[0].plot(x,y_a,color="r",linestyle="-",label="A")
    axes[1].plot(x,y_b,color="b",linestyle="--",label="B")
    
    # plt.legend(loc="upper right")# 显示图例必须在绘制时设置好
    axes[0].legend(loc="upper right")# 显示图例必须在绘制时设置好
    axes[1].legend(loc="upper right")# 显示图例必须在绘制时设置好
    
    # 添加网格
    # plt.grid(True,linestyle="--",alpha=0.5) # 添加网格
    axes[0].grid(True,linestyle="--",alpha=0.5)
    axes[1].grid(True,linestyle="-.",alpha=1)
    plt.show()
    
    折叠

    png

    (八)常见图形绘制

    1.绘制数学函数图像

    import numpy as np 
    # 准备数据
    x = np.linspace(-10,10,1000) # 从-10到10 生成1000个数据(数据越多,线条越顺畅自然)
    y = np.sin(x)
    
    # 创建画布
    plt.figure(figsize=(5,2.5),dpi=300)
    # 绘制函数图像
    plt.plot(x,y)
    # 添加网格显示
    plt.grid()
    # 显示图像
    plt.show()
    

    png

    2.散点图

    # 数据准备
    import random
    x = range(30)
    y = [random.uniform(30,60) for i in x]
    # 创建画布
    plt.figure(figsize=(10,5),dpi=300)
    # 图像绘制
    plt.scatter(x,y)
    # 图像显示
    plt.show()
    

    png

    3.柱状图

    data_name = ['我是路人甲','山哥之王','山鸡之王','山崖传说','神秘姥爷','嘎腰子传说','嘤呜','我直呼好家伙',"乌拉","一拳一个"]
    data_love = [1684,8664,8469,6468,5381,6584,1466,6458,4476,6584]
    x = range(len(data_name))
    y = data_love
    
    plt.figure(figsize=(15,3),dpi=100)
    plt.bar(x,y,width=0.5,color=["r","g","b","m","y","c","k"],align="center") # 对齐方式有edge和center两种
    
    plt.xticks(x,data_name,fontsize=12)
    plt.show()
    

    png

    4.直方图

    x =  np.random.normal(50,10,1000) # (均值,标准差,个数)
    y = range(50)
    
    plt.figure(figsize=(15,3),dpi=100)
    plt.hist(x,bins=50,density=True, color='g', alpha=1)
    plt.show()
    

    png

    5.饼状图

    x =  [random.randint(0,10) for i in range(5)] # 随机生成5个数,每个数的值在0-9之间
    plt.figure(figsize=(15,3),dpi=100)
    plt.pie(x) # x:数量,会根据数量自动计算百分比  labels:每部分的名城 autopct:占比显示指定 %1.2f%% colors:每部分的颜色
    plt.show()
    

    png

    
    

    萌狼蓝天的博客园

    
    
  • 相关阅读:
    贪心算法(四) | 加油站、单调递增的数字、监控二叉树 | leecode刷题笔记
    Android MotionLayout
    Java对象数组练习
    C++多态与虚函数的实现
    【linux外设挂载】linux系统找到U盘解决方案
    [构造]Repetitions Decoding Codeforces1642D
    SpringBoot 入门
    MTR 网络连通性测试工具 基础入门 整理
    js实现星空雨随鼠标移动
    [七夕节]——一款基于canvas绘制五颜六色线条合成一个爱心发光动画特效
  • 原文地址:https://www.cnblogs.com/mllt/p/matplotlib.html