• matplotlib的使用--折线图--入门


    目录

    matplotlib应用介绍

    一天天气变化图

    两小时随机温度图 

      中文显示问题

    个人交往统计图

    多人交往统计图

    总结


    介绍:

     

    举个例子(一天天气变化图):

    假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],将其变成折线图进行展示

    在windows中系统中展示的图片如图:

     

    现在来优化代码:

    设置图片大小

    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] 
    
    # figure图形图标的意思,这里只画的图
    # 通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
    # dpi 表示一个像素点的个数
    plt.figure(figsize=(10, 7), dpi=80)
    
    # 绘制折线图
    plt.plot(x, y) 
    # 保存(svg文件在浏览器中打开放大不会失帧)
    plt.savefig('./sig_size.png')
    # 展示图形
    # plt.show() 

    图片展示

    设置x,y轴的数值
    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.figure(figsize=(10, 7), dpi=80)
    
    plt.plot(x, y) 
    
    # 单独设置x轴
    # _xticks = range(2, 26, 2) # list(_xticks): [2,4,6,8...]
    _xticks = [i/2 for i in range(4, 49)] # [2.0, 2.5, 3.0, 3.5 .....]
    # 刻度太密集可以使用列表步长
    plt.xticks(_xticks[::3])
    # y轴利用数据最小值最大值进行设置范围(最大值需要+1才能取到值)
    plt.yticks(range(min(y), max(y)+1))
    plt.show() 

     举个例子(两小时随机温度图)

    如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
    a= [random.randint(20,35) for i in range(120)]

    从逻辑上完成功能实现:

    import random
    from matplotlib import pyplot as plt
    
    x = range(0, 120) 
    y = [random.randint(20,35) for i in range(120)]
    plt.figure(figsize=(16, 8), dpi=80)
    plt.plot(x, y) 
    
    # 设置x轴刻度
    _xticks_label = ['10点{}分'.format(i) for i in range(60)]
    _xticks_label += ['11点{}分'.format(i) for i in range(60)]
    #rotation  旋转
    plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45)
    plt.yticks(range(min(y), max(y)+1))
    plt.show() 

     但是会发现字体出现问题

    所以需要解决字体的显示问题

    所以在windows,或者linux中,可能有效的办法:

    import random
    import matplotlib
    
    from matplotlib import pyplot as plt
    
      # 这是windows和linux设置字体的方式
    font = {
        'family': 'MicroSoft YaHei',
        'weight': 'bold',
        'size': 'larger'
    }
    matplotlib.rc("font", **font)
    # 类似于matplotlib.rc("font", family='MicroSoft YaHei', weight='blod', size='larger')
    
    x = range(0, 120) 
    y = [random.randint(20,35) for i in range(120)]
    plt.figure(figsize=(16, 8), dpi=80)
    plt.plot(x, y) 
    
    # 设置x轴刻度
    _xticks_label = ['10点{}分'.format(i) for i in range(60)]
    _xticks_label += ['11点{}分'.format(i) for i in range(60)]
    #rotation  旋转
     #取步长,数字和字符串一一对应,数据的长度一样
    plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45)
    plt.yticks(range(min(y), max(y)+1))
    plt.show() 

     但是不保证成功,因为电脑的字体配置情况不同

    第二种推荐的方法:

    自己设置字体文件:(字体库下载)windows在 C:WindowsFonts路径下就是字体文件

    import random
    import matplotlib
    
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    # 另一种设置字体的方式
    my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
    
    x = range(0, 120) 
    y = [random.randint(20,35) for i in range(120)]
    plt.figure(figsize=(16, 8), dpi=80)
    plt.plot(x, y) 
    
    # 设置x轴刻度
    _xticks_label = ['10点{}分'.format(i) for i in range(60)]
    _xticks_label += ['11点{}分'.format(i) for i in range(60)]
    #rotation  旋转
    plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font)
    plt.yticks(range(min(y), max(y)+1))
    plt.show() 

    可以通过size属性设置字体大小:

    plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=12)

    再给折线图添加一些描述信息,就算完成了

    import random
    import matplotlib
    
    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    # 另一种设置字体的方式
    my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")
    
    x = range(0, 120) 
    y = [random.randint(20,35) for i in range(120)]
    plt.figure(figsize=(14, 8), dpi=80)
    plt.plot(x, y) 
    
    # 设置x轴刻度
    _xticks_label = ['10点{}分'.format(i) for i in range(60)]
    _xticks_label += ['11点{}分'.format(i) for i in range(60)]
    #rotation  旋转
    #取步长,数字和字符串一一对应,数据的长度一样
    plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=10)
    plt.yticks(range(min(y), max(y)+1))
    
    # 添加描述信息
    plt.xlabel('时间', fontproperties=my_font, size=14)
    plt.ylabel('温度(单位:℃)', fontproperties=my_font, size=14)
    plt.title('10点到12点每分钟气温的变化情况', fontproperties=my_font, size=20)
    
    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
    from matplotlib import font_manager
    
    my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc')
    
    x = range(11, 31)
    y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
    plt.figure(figsize=(10, 7), dpi=80)
    plt.plot(x, y)
    
    _xtick_label = ['{}岁'.format(i) for i in x]
    plt.xticks(x, _xtick_label, fontproperties=my_font)
    # 辅助线
    plt.grid(alpha=0.4) # 透明度
    plt.xlabel('时间', fontproperties=my_font)
    plt.ylabel('女朋友数(单位:个)', fontproperties=my_font)
    plt.title('11到30岁之间谈过的女朋友的数量统计', fontproperties=my_font)
    
    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岁等

    legend(loc=数字)

    Location StringLocation Code
    'best' 0
    'upper right' 1
    'upper left' 2
    'lower left' 3
    'lower right' 4
    'right' 5
    'center left' 6
    'center right' 7
    'lower center' 8
    'upper center' 9
    'center' 10

    from matplotlib import pyplot as plt
    from matplotlib import font_manager
    
    my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc')
    
    x = range(11, 31)
    y1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
    y2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
    plt.figure(figsize=(10, 7), dpi=80)
    plt.plot(x, y1, label='自己', color='r', linestyle='--')
    plt.plot(x, y2, label='同桌', linewidth=5, alpha=0.8)
    _xticks_label = ['{}岁'.format(i) for i in x]
    plt.xticks(x, _xticks_label, fontproperties=my_font)
    plt.grid(alpha=0.4)
    # 添加图例
    plt.legend(prop=my_font, loc=0)
    plt.show()

     总结:


      

    STXINGKA.TTF

  • 相关阅读:
    Linux运维常用命令总结
    Leetcode: Capacity To Ship Packages Within D Days
    Leetcode: Stream of Characters
    Leetcode: Backspace String Compare
    Leetcode: Shortest Way to Form String
    Leetcode: Campus Bikes II
    Leetcode: Minimum Domino Rotations For Equal Row
    Leetcode: Palindromic Substrings
    Summary: curated List of Top 75 LeetCode Questions to Save Your Time
    Leetcode: Subtree of Another Tree
  • 原文地址:https://www.cnblogs.com/pywjh/p/10742811.html
Copyright © 2020-2023  润新知