• 数据分析-matplotlib基本要点


    matplotlib基本要点

    什么是matplotlib

    matplotlib:最流行的Python底层绘图库,主要做诗句可视化图表,名字取材于MATLAB,模仿MATLAB构建

    为什么要学习matplotlib

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

    matplotlib基本要点

    • axis轴,指的是x或者y这种坐标轴
    • 每个红色的点是坐标,把五个点的坐标连接成一条直线,组成了一个折线图

    简单使用:假设一天中每隔两小时range(2,26,2)的气温℃分别是[15,13,14.5,17,20,25,26,26,27,22,18,15]

    from matplotlib import pyplot as plt
    
    x = range(2, 26, 2)
    y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
    
    # 绘图
    plt.plot(x, y)
    # 展示图形
    plt.show()
    

    可以改进的地方

    1. 设置图片大小(要一个高清无码大图)
    fig = plt.figure(figsize=(20,8),dpi=80)
    

    figure图形图标的意思,在这里指的就是我们画的图
    通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
    在图像模糊的时候可以传入dpi参数,让图片更加清晰

    1. 保存到本地
      保存图片
    plt.savefig("./sit_size.png")  
    

    可以保存为svg这种矢量图格式,放大不会有锯齿

    1. 描述信息,比如x轴和y轴表示什么,这个图表示什么,设置中文字体

      1. 为什么无法显示中文:matplotlib默认不支持中文字符,因为默认的英文字体无法显示汉字
      2. 查看linux/mac下面支持的字体:
        1. fc-list -> 查看支持的字体
        2. fc-list :lang=zh ->查看支持的中文(冒号前面有空格)
      3. 如何修改matplotlib的默认字体?
        1. 通过matplotlib.rc可以修改
        2. 通过matplotlin 下的font_manager可以解决
    # 设置中文字体
    my_font = font_manager.FontProperties(fname="/System/Library/Fonts/PingFang.ttc")
    plt.xticks(x[::5],_x_ticks[::5],rotation=90,fontproperties=my_font)
    plt.xlabel("时间",fontproperties=myfont)#设置x轴的label
    plt.ylabel("温度(℃)",fontproperties=myfont)#设置y轴的label
    plt.title("10点到12点每分钟的时间变化情况",frontproperties=myfont)#设置title
    
    
    1. 调整x或y的刻度的间距
    x = range(2,26,2)
    plt.xticks(x[::2])
    

    当刻度太密集时候使用列表的步长(间隔取值)来解决,matplotlib会自动帮我们对应。

    1. 线条的样式(比如颜色,透明度等)
      绘制网格,alpha为透明度
    plt.grid(alpha= 0.4)
    

    绘制自己的图形风格

    颜色字符 风格字符
    r 红色 - 实线
    g 绿色 -- 虚线
    b 蓝色 -. 点划线
    w 白色 : 点虚线,虚线
    '' 留空或空格,无线条
    c 青色
    m 洋红
    y 黄色
    k 黑色
    #00ff00十六进制
    0.8 灰度值字符串
    1. 标记出特殊的点(比如告诉别人最高点和最低点在哪儿)

    2. 给图片添加一个水印(防伪,防止盗用)

    • 案例代码一
    """
    matplotlib绘制10点到12点的气温
    """
    import matplotlib.pyplot as plt
    
    x = range(2, 26, 2)
    y = [15, 13, 14.5, 17, 20, 25, 26, 26, 27, 22, 18, 15]
    # 设置图片大小 ,figsize(宽,高),dpi每英寸上点的个数
    plt.figure(figsize=(20, 8), dpi=80)
    # 设置x轴的刻度 , X轴并不是我们自己的刻度
    _xtick_lables = [i / 2 for i in range(4, 49)]
    plt.xticks(_xtick_lables[::3])  # 当刻度太密集使用列表的步长(间隔取值)来解决,matplotlib会自动帮我们对应
    plt.yticks(range(min(y), max(y) + 1))
    # 绘图
    plt.plot(x, y)
    # 保存图片
    # plt.savefig("./t1.png")
    # 展示图形
    plt.show()
    
    

    • 案例代码二
    
    """
    列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况
    a = [random.randint(20,35) for i in range(120)]
    """
    from matplotlib import pyplot as plt, font_manager
    import random
    import matplotlib
    
    # Windows和Linux设置字体的方式
    # font = {'family': 'monospace',
    #         'weight': 'bold',
    #         'size': 'larger'}
    # matplotlib.rc()
    # matplotlib.rc("font",family='MicroSoft YaHei', weight='bold')
    
    # 另外一种设置字体大小的方式
    # my_font = font_manager.FontProperties(fname="C:WindowsFontsmingliub.ttc")
    # 设置字体为SimHei显示中文
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 设置正常显示字符
    plt.rcParams['axes.unicode_minus'] = False
    
    x = range(0, 120)
    y = [random.randint(20, 35) for i in range(120)]
    # 调整图片大小
    plt.figure(figsize=(20, 8), dpi=80)
    plt.plot(x, y)
    # 调整x轴的刻度
    _xtick_lables = ["10点{}分".format(i) for i in range(60)]
    _xtick_lables += ["11点{}分".format(i) for i in range(60)]
    # 取步长,数字和字符串一一对应,数据的长度一样
    # plt.xticks(list(x)[::3], _xtick_lables[::3], rotation = 45, fontproperties=my_font) # rotation,旋转的度数
    plt.xticks(list(x)[::3], _xtick_lables[::3], rotation=45)
    
    # 添加描述信息
    plt.xlabel("时间")
    plt.ylabel("温度 单位(℃)")
    plt.title("10点到12点每分钟气温变化情况")
    plt.show()
    

    • 案例三
    """
    假设大家在30岁的时候,根据自己的实际情况,
    统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,
    请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
    a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
    y表示个数
    x表示岁数,比如11岁,12岁等
    """
    from matplotlib import pyplot as plt
    
    y = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
    x = range(11, 31)
    
    # 设置中文
    # 设置字体为SimHei显示中文
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 设置正常显示字符
    plt.rcParams['axes.unicode_minus'] = False
    
    # 设置图形大小
    plt.figure(figsize=(20, 8), dpi=80)
    
    plt.plot(x, y)
    
    # 设置x轴刻度
    x_ticks_lables = ["{}岁".format(i) for i in x]
    plt.xticks(x, x_ticks_lables)
    # 绘制网格,设置透明度
    plt.grid(alpha=0.4)
    # 展示
    plt.show()
    
    

    • 案例四
    """
    假设大家在30岁的时候,根据自己的实际情况,
    统计出来了你和你同桌从11岁到30岁每年交的女(男)朋友的数量如列表a和列表b,
    请在一个图中绘制出该数据的折线图,
    以便分析自己和同桌20年之间的差异,同时分析每年交女(男)朋友的数量走势
    
    a = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
    b = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    y表示个数
    x表示岁数,比如11岁,12岁等
    """
    
    from matplotlib import pyplot as plt
    
    y_1 = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
    y_2 = [1, 0, 3, 1, 2, 2, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    x = range(11, 31)
    
    # 设置中文
    # 设置字体为SimHei显示中文
    plt.rcParams['font.sans-serif'] = ['SimHei']
    # 设置正常显示字符
    plt.rcParams['axes.unicode_minus'] = False
    
    # 设置图形大小
    plt.figure(figsize=(20, 8), dpi=80)
    
    plt.plot(x, y_1, label="自己", color="orange", linestyle=':')
    plt.plot(x, y_2, label="同桌", color="cyan", linestyle='--')
    
    # 设置x轴刻度
    x_ticks_lables = ["{}岁".format(i) for i in x]
    plt.xticks(x, x_ticks_lables)
    
    # 绘制网格
    plt.grid(alpha=0.4)
    
    # 添加图列
    plt.legend(loc="upper left")
    
    # 展示
    plt.show()
    
    

    总结之前我们都做了什么

    1. 绘制了折线图(plt.plot)
    2. 设置了图片的大小和分辨率(plt.figure)
    3. 实现了图片的保存(plt.savefig)
    4. 设置了xy轴上的刻度和字符串(xticks)
    5. 解决了刻度系数和密集的问题(xticks)
    6. 设置了标题,xy轴的lable(title,xlable,ylable)
    7. 设置了字体(font_manager.fontProperties,matplotlib.rc)
    8. 在同一个图上绘制多个图形(plt多次plot即可)
    9. 为不同的图形添加图例

  • 相关阅读:
    解决VS控制台窗口自动关闭问题
    ZOJ1003:Crashing Balloon(dfs)
    POJ2607:Fire Station(SPFA+枚举)
    C语言在屏幕上输出玫瑰花图片
    HRBUST
    UVA10182: Bee Maja (模拟)
    洛谷P1144: 最短路计数(bfs)
    (转载)MySQL LIKE 用法:搜索匹配字段中的指定内容
    (转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE
    (转载)INSERT INTO .. ON DUPLICATE KEY 语法与实例教程
  • 原文地址:https://www.cnblogs.com/steven-csh/p/14635275.html
Copyright © 2020-2023  润新知