zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode 48. Rotate Image
    leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点) 、26/80. Remove Duplicates from Sorted ArrayI、II
    leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
    leetcode 58. Length of Last Word
    安卓操作的一些问题解决
    leetcode 378. Kth Smallest Element in a Sorted Matrix
    android studio Gradle Build速度加快方法
    禁用gridview,listview回弹或下拉悬停
    Android Studio找不到FragmentActivity类
    安卓获取ListView、GridView等滚动的距离(高度)
  • 原文地址:https://www.cnblogs.com/pywjh/p/10742811.html
Copyright © 2011-2022 走看看