zoukankan      html  css  js  c++  java
  • matplotlib 入门

    为什么要学习matplotlib

    1.能将数据进行可视化,更直观的呈现

    2.使数据更加客观,更具说服力

    什么是matplotlib

    matplotlib:最流行的Python底层绘图库,主要做数据可视化图表,模仿MATLAB创建

    基础绘图

    案例

    假设一天中每隔两个小时(range(2,26,2))的气温分别是[15,13,14.5,17,20,25,26,26,24,22,18,15]

     代码
    import matplotlib.pyplot as plt
     规范,官方推荐构建坐标
    x = range(2,26,2)
    y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
     画图
    plt.plot(x, y)
     显示图标
    plt.show()

    设置图片大小

    案例

     代码
    fig = plt.figure(figsize=(20,8), dpi=100)
     figsize 接收一个元组,表示图片的高和宽,单位是英寸 dpi 分辨率,代表了每一英寸有多少个像素,默认80
    plt.plot(x,y)
    plt.show()

     

    保存图片

     代码
    fig = plt.figure(figsize=(20,8), dpi=100)
    plt.plot(x,y)
    fig.savefig('test.png')

    x轴,y轴刻度调整

    案例1

    1 # 代码
    2 plt.plot(x, y)
    3 # x轴的刻度
    4 plt.xticks(x)
    5 # y轴的刻度
    6 plt.yticks(y)
    7 plt.show()

    案例2

    列表a表示10点到12点每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?

    a = [random.randint(20,35) for i in range(120)]

     1 # 代码
     2 import random
     3 
     4 # 随机气温值
     5 # y = []
     6 # 产生120个随机值
     7 #for i in range(120):
     8 #    y.append(random.randint(20,35))
     9 # 列表生成式
    10 y = [random.randint(20,35) for i in range(120)]
    11 x = list(range(120))
    12 # 设置图片大小
    13 fig = plt.figure(figsize=(20,8))
    14 # 画图
    15 plt.plot(x,y)
    16 # 调整刻度
    17 xlables = ['10点{}分'.format(i) for i in range(60) ]
    18 xlables += ['11点{}分'.format(i) for i in range(60) ]
    19 plt.xticks(x[::3], xlables[::3])
    20 plt.yticks(y)
    21 plt.show()

    显示中文

    matplotlib默认不支持中文字符,需要修改默认字体来显示中文字符。

    案例

     1 # 代码
     2 import random
     3 import matplotlib as mpl
     4 # 设置字符集
     5 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 用来正常显示中文标签
     6 mpl.rcParams['font.size'] = 16         # 设置字体大小
     7 # 随机气温值
     8 # y = []
     9 # 产生120个随机值
    10 #for i in range(120):
    11 #    y.append(random.randint(20,35))
    12 # 列表生成式
    13 y = [random.randint(20,35) for i in range(120)]
    14 x = list(range(120))
    15 # 设置图片大小
    16 fig = plt.figure(figsize=(20,8))
    17 # 画图
    18 plt.plot(x,y)
    19 # 调整刻度
    20 xlables = ['10点{}分'.format(i) for i in range(60) ]
    21 xlables += ['11点{}分'.format(i) for i in range(60) ]
    22 plt.xticks(x[::3], xlables[::3], rotation=45)
    23 plt.yticks(y)
    24 plt.show()

    添加描述信息

    x,y轴描述

     1 # 代码
     2 y = [random.randint(20,35) for i in range(120)]
     3 x = list(range(120))
     4 # 设置图片大小
     5 fig = plt.figure(figsize=(20,8))
     6 # 画图
     7 plt.plot(x,y)
     8 # 调整刻度
     9 xlables = ['10点{}分'.format(i) for i in range(60) ]
    10 xlables += ['11点{}分'.format(i) for i in range(60) ]
    11 plt.xticks(x[::3], xlables[::3], rotation=45)
    12 plt.yticks(y)
    13 # 添加描述
    14 plt.xlabel('时间', color='red', fontdict={'fontsize': 20})
    15 plt.ylabel('温度')
    16 plt.show()

    图形标题

     1 # 代码
     2 y = [random.randint(20,35) for i in range(120)]
     3 x = list(range(120))
     4 # 设置图片大小
     5 fig = plt.figure(figsize=(20,8))
     6 # 画图
     7 plt.plot(x,y)
     8 # 调整刻度
     9 xlables = ['10点{}分'.format(i) for i in range(60) ]
    10 xlables += ['11点{}分'.format(i) for i in range(60) ]
    11 plt.xticks(x[::3], xlables[::3], rotation=45)
    12 plt.yticks(y)
    13 # 添加描述
    14 plt.xlabel('时间', color='red', fontdict={'fontsize': 20})
    15 plt.ylabel('温度')
    16 # 设置标题
    17 plt.title('某日10点到12点间的温度变化情况')
    18 plt.show()

    网格

     1 # 代码
     2 # 代码
     3 y = [random.randint(20,35) for i in range(120)]
     4 x = list(range(120))
     5 # 设置图片大小
     6 fig = plt.figure(figsize=(20,8))
     7 # 画图
     8 plt.plot(x,y)
     9 # 调整刻度
    10 xlables = ['10点{}分'.format(i) for i in range(60) ]
    11 xlables += ['11点{}分'.format(i) for i in range(60) ]
    12 plt.xticks(x[::3], xlables[::3], rotation=45)
    13 plt.yticks(y)
    14 # 添加描述
    15 plt.xlabel('时间', color='red', fontdict={'fontsize': 20})
    16 plt.ylabel('温度')
    17 # 设置标题
    18 plt.title('某日10点到12点间的温度变化情况')
    19 # 添加网格
    20 plt.grid(alpha=0.1)
    21 plt.show()

    一个图中画多个图

    案例

    问题:根据实际情况统计出来你和你的同桌各自从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]

     1 #代码
     2 import matplotlib.pyplot as plt
     3 import matplotlib as mpl
     4 # 设置中文
     5 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 用来正常显示中文标签
     6 mpl.rcParams['font.size'] = 16         # 设置字体大小
     7 # 构建坐标
     8 # x轴表示 年龄 ,y轴表示女朋友个数
     9 x = range(11, 31)
    10 y_self = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
    11 y_d = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
    12 
    13 # 创建容器
    14 fig = plt.figure(figsize=(20,8))
    15 # 画图
    16 plt.plot(x, y_self, label='自己', color='black', linestyle='-.')
    17 plt.plot(x, y_d, label='同桌')
    18 # 设置刻度
    19 x_lables = ['{}岁'.format(i) for i in x]
    20 plt.xticks(x, x_lables)
    21 
    22 plt.xlabel('年龄')
    23 plt.ylabel('女朋友个数')
    24 plt.title('我和同桌历年交女朋友个数对比')
    25 # 设置了图例一定要加上这句话
    26 plt.legend()
    27 plt.grid(alpha=0.3)
    28 # 标记点
    29 plt.annotate('最高点',xy=(23,6), xytext=(24, 6),arrowprops={'arrowstyle': '<->'})
    30 plt.show()

    自定义绘图风格

    1 # 代码
    2 plt.plot(
    3     x,
    4     y,
    5     color='r', # 线条颜色
    6     linestyle='--',    # 线条风格
    7     linewidth=5,    # 线条粗细
    8     alpha=0.5        #透明度
    9 )

    标记一个点

     1 # 代码
     2 plt.annotate(text='最高点', xytext=(24, 6.1), xy=(23, 6), arrowprops={'arrowstyle': '->'})
     3 # text 想要标记的文本
     4 # xytext 标记文本的坐标
     5 # xy 被标记点的坐标 
     6 # arrowprops 箭头形式
     7 '''
     8            ============   =============================================
     9             Name           Attrs
    10             ============   =============================================
    11             ``'-'``        None
    12             ``'->'``       head_length=0.4,head_width=0.2
    13             ``'-['``       widthB=1.0,lengthB=0.2,angleB=None
    14             ``'|-|'``      widthA=1.0,widthB=1.0
    15             ``'-|>'``      head_length=0.4,head_width=0.2
    16             ``'<-'``       head_length=0.4,head_width=0.2
    17             ``'<->'``      head_length=0.4,head_width=0.2
    18             ``'<|-'``      head_length=0.4,head_width=0.2
    19             ``'<|-|>'``    head_length=0.4,head_width=0.2
    20             ``'fancy'``    head_length=0.4,head_width=0.4,tail_width=0.4
    21             ``'simple'``   head_length=0.5,head_width=0.5,tail_width=0.2
    22             ``'wedge'``    tail_width=0.3,shrink_factor=0.5
    23             ============   =============================================
    24 '''

    总结

    1.绘制了折线图

    2.设置了图片的大小和分辨率

    3.实现的图片的保存

    4.设置了XY轴的刻度和字符串

    5.解决了刻度稀疏和密度的问题

    6.设置了标题,x,y轴的lable

    7.设置了字体

    8.在一个图上绘制多个图形

    9.为不同图形添加图例

    绘制散点图

    假设通过爬虫你获取到了北京2016年3月份,10月份每天白天的最高气温(分别位于列表 a, b),要求找出气温随时间变化的规律。

    1 a = [10, 16, 17, 14, 12, 10, 12, 6, 6, 7, 8, 9, 12, 15, 15, 17, 18, 21, 16, 16, 20, 13, 15, 15, 15, 18, 20, 22, 22, 22, 24]
    2 b = [26, 26, 28, 19, 21, 17, 16, 19, 18, 20, 20, 19, 22, 23, 17, 20, 21, 20, 22, 15, 11, 15, 5, 13, 17, 10, 11, 13, 12, 13, 6]
    3 # 数据来源:http://lishi.tianqi.com/beijing/201610.html

    散点图的更多应用场景

    不同条件(维度)之间的内在关联关系

    观察数据的离散程度

    绘制条形图

    问题1

    假设获取到2019年内地电影票房前20的电影(列表x)和电影票房数据(列表y),那么如何更加直观的展示数据。

    1 x = ['哪吒之魔童降世', '流浪地球', '复仇者联盟4:终局之战', '疯狂的外星人', '飞驰人生', '烈火英雄', '速度与激情:特别行动', '蜘蛛侠:英雄远征', '扫毒2天地对决', '大黄蜂', '惊奇队长', '比悲伤更悲伤的故事', '哥斯拉2:怪兽之王', '阿丽塔:战斗天使', '银河补习班', '狮子王', '反贪风暴4 ', '熊出没·原始时代', '使徒行者2:谍影行动', '大侦探皮卡丘']
    2 y = [49.04, 46.18, 42.05, 21.83, 17.03, 16.74, 14.16, 14.01, 12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64, 8.23, 7.88, 7.09, 6.92, 6.34]
     1 # 代码
     2 import matplotlib as mpl
     3 import matplotlib.pyplot as plt
     4 
     5 # 设置中文
     6 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 用来正常显示中文标签
     7 mpl.rcParams['font.size'] = 16         # 设置字体大小
     8 
     9 # 构建坐标
    10 movies = ['哪吒之魔童降世', '流浪地球', '复仇者联盟4:终局之战', '疯狂的外星人', '飞驰人生', '烈火英雄', '速度与激情:特别行动', '蜘蛛侠:英雄远征', '扫毒2天地对决', '大黄蜂', '惊奇队长', '比悲伤更悲伤的故事', '哥斯拉2:怪兽之王', '阿丽塔:战斗天使', '银河补习班', '狮子王', '反贪风暴4 ', '熊出没·原始时代', '使徒行者2:谍影行动', '大侦探皮卡丘']
    11 
    12 y = [49.04, 46.18, 42.05, 21.83, 17.03, 16.74, 14.16, 14.01, 12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64, 8.23, 7.88, 7.09, 6.92, 6.34]
    13 
    14 x = range(len(movies))
    15 
    16 # 画图
    17 fig = plt.figure(figsize=(20,8), dpi=100)
    18 plt.bar(x, y, width=0.5, color='orange')
    19 # 刻度
    20 plt.xticks(x, movies, rotation=-90)
    21 
    22 plt.xlabel('电影')
    23 plt.ylabel('票房(亿元)')
    24 plt.title('2019年内地前20名电影票房榜')
    25 # 网格
    26 # plt.grid()
    27 plt.show()

    横向的条形图

     1 # 代码
     2 import matplotlib as mpl
     3 import matplotlib.pyplot as plt
     4 
     5 # 设置中文
     6 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 用来正常显示中文标签
     7 mpl.rcParams['font.size'] = 16         # 设置字体大小
     8 
     9 # 构建坐标
    10 movies = ['哪吒之魔童降世', '流浪地球', '复仇者联盟4:终局之战', '疯狂的外星人', '飞驰人生', '烈火英雄', '速度与激情:特别行动', '蜘蛛侠:英雄远征', '扫毒2天地对决', '大黄蜂', '惊奇队长', '比悲伤更悲伤的故事', '哥斯拉2:怪兽之王', '阿丽塔:战斗天使', '银河补习班', '狮子王', '反贪风暴4 ', '熊出没·原始时代', '使徒行者2:谍影行动', '大侦探皮卡丘']
    11 
    12 y = [49.04, 46.18, 42.05, 21.83, 17.03, 16.74, 14.16, 14.01, 12.85, 11.38, 10.25, 9.46, 9.27, 8.88, 8.64, 8.23, 7.88, 7.09, 6.92, 6.34]
    13 
    14 x = range(len(movies))
    15 
    16 # 画图
    17 fig = plt.figure(figsize=(20,8), dpi=100)
    18 plt.barh(x, y, color='orange')
    19 # 刻度
    20 plt.yticks(x, movies)
    21 
    22 plt.ylabel('电影')
    23 plt.xlabel('票房(亿元)')
    24 plt.title('2019年内地前20名电影票房榜')
    25 # 网格
    26 # plt.grid()
    27 plt.show()

    问题2

    列表a中的电影的电影最近5天的电影分别在列表,b_25,b_26,b_27,b_28,b_29中,为了展示电影本身票房,及同其他电影数据的对比,应该如何更加直观的呈现数据。

    1 a = ['决胜时刻', '诛仙Ⅰ', '小小的愿望']
    2 b_25 = [891.4, 246.71, 550.45]
    3 b_26 = [819.27, 397.18, 513.67]
    4 b_27 = [867.78, 480.43, 752.36]
    5 b_28 = [533.09, 500.42, 780.69]
    6 b_29 = [679.87, 462.28, 374.11]
     1 # 代码
     2 # 导库
     3 import matplotlib as mpl
     4 import matplotlib.pyplot as plt
     5 
     6 # 设置中文
     7 mpl.rcParams['font.sans-serif'] = ['Fangsong']
     8 mpl.rcParams['font.size'] = 16
     9 # 准备数据
    10 a = ['决胜时刻', '诛仙Ⅰ', '小小的愿望']
    11 b_25 = [891.4, 246.71, 550.45]
    12 b_26 = [819.27, 397.18, 513.67]
    13 b_27 = [867.78, 480.43, 752.36]
    14 b_28 = [533.09, 500.42, 780.69]
    15 b_29 = [679.87, 462.28, 374.11]
    16 #
    17 fig = plt.figure(figsize=(20,8))
    18 width = 0.1
    19 plt.bar(range(3), b_25, width=width)
    20 plt.bar([i+width for i in range(3)], b_26, width=width, label='9月26日')
    21 plt.bar([i+width*2 for i in range(3)], b_27, width=width, label='9月27日')
    22 plt.bar([i+width*3 for i in range(3)], b_28, width=width, label='9月28日')
    23 plt.bar([i+width*4 for i in range(3)], b_29, width=width, label='9月29日')
    24 # 刻度
    25 plt.xticks([0.2, 1.2, 2.2], a)
    26 # 描述信息
    27 plt.xlabel('电影')
    28 plt.ylabel('票房(万)')
    29 plt.title('某些电影的票房')
    30 plt.legend()
    31 plt.show()

    条形图的更多应用场景

    数量统计

    频率统计

    绘制直方图

    问题1

    我们获取了347部电影的时长(列表data中),希望统计出这些电影的时长的分布状态(比如时长100到120分钟电影的数量,出现频次)等信息,你该如何呈现这些数据?

    1 data = [110, 201, 160, 152, 139, 178, 179, 83, 67, 132, 136, 177, 162, 110, 132, 115, 108, 102, 76, 105, 108, 24, 140, 162, 143, 165, 163, 95, 129, 137, 84, 93, 115, 96, 145, 173, 102, 116, 100, 120, 119, 88, 108, 136, 144, 111, 212, 87, 120, 91, 126, 55, 134, 181, 159, 138, 119, 138, 93, 155, 119, 88, 108, 136, 144, 111, 212, 87, 120, 91, 126, 55, 134, 181, 159, 138, 119, 138, 93, 155, 89, 140, 139, 75, 230, 179, 126, 178, 102, 91, 150, 96, 118, 100, 125, 130, 144, 140, 124, 157, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 89, 140, 139, 75, 230, 179, 126, 178, 102, 91, 150, 96, 118, 100, 125, 130, 144, 140, 124, 157, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 101, 141, 99, 139, 132, 93, 136, 127, 87, 96, 108, 120, 111, 130, 91, 237, 151, 76, 102, 64, 118, 84, 84, 105, 140, 144, 133, 93, 123, 147, 130, 149, 147, 121, 114, 105, 104, 98, 115, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 101, 141, 99, 139, 132, 93, 136, 127]
     1 # 代码
     2 import matplotlib as mpl
     3 import matplotlib.pyplot as plt
     4 
     5 # 设置中文
     6 mpl.rcParams['font.sans-serif'] = ['Fangsong']
     7 mpl.rcParams['font.size'] = 16
     8 
     9 # 准备数据
    10 data = [110, 201, 160, 152, 139, 178, 179, 83, 67, 132, 136, 177, 162, 110, 132, 115, 108, 102, 76, 105, 108, 24, 140, 162, 143, 165, 163, 95, 129, 137, 84, 93, 115, 96, 145, 173, 102, 116, 100, 120, 119, 88, 108, 136, 144, 111, 212, 87, 120, 91, 126, 55, 134, 181, 159, 138, 119, 138, 93, 155, 119, 88, 108, 136, 144, 111, 212, 87, 120, 91, 126, 55, 134, 181, 159, 138, 119, 138, 93, 155, 89, 140, 139, 75, 230, 179, 126, 178, 102, 91, 150, 96, 118, 100, 125, 130, 144, 140, 124, 157, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 89, 140, 139, 75, 230, 179, 126, 178, 102, 91, 150, 96, 118, 100, 125, 130, 144, 140, 124, 157, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 162, 121, 170, 111, 124, 99, 102, 75, 120, 139, 110, 138, 40, 70, 138, 137, 123, 133, 161, 83, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 101, 141, 99, 139, 132, 93, 136, 127, 87, 96, 108, 120, 111, 130, 91, 237, 151, 76, 102, 64, 118, 84, 84, 105, 140, 144, 133, 93, 123, 147, 130, 149, 147, 121, 114, 105, 104, 98, 115, 93, 121, 105, 106, 140, 101, 124, 148, 131, 101, 90, 90, 100, 129, 100, 94, 96, 89, 144, 100, 107, 90, 137, 133, 97, 84, 99, 142, 126, 132, 144, 124, 112, 111, 169, 151, 132, 169, 127, 120, 101, 141, 99, 139, 132, 93, 136, 127]
    11 # 组距
    12 bin_width = 8
    13 max_value = max(data)
    14 min_value = min(data)
    15 
    16 bins = (max_value - min_value)//bin_width
    17 
    18 # 实际组距
    19 real_width = (max_value - min_value)/bins
    20 
    21 # 设置大小
    22 fig = plt.figure(figsize=(20,8))
    23 plt.hist(data, bins)
    24 print([min_value + i*bin_width for i in range(bins)])
    25 # x轴刻度
    26 plt.xticks([min_value + i*real_width for i in range(bins)], rotation=45)
    27 plt.grid()
    28 plt.show()

    需要注意的点:

    1.组数的选择

        组数要适当,较少会有太大的统计误差,太多规律不明显。

         当数据在100以内时,按数据多少一般分5-12组

          当数据较多时可以按照组距进行分组

           组距:是指每组的两个端点的距离

          组数:=极差/组距 = (最大数据-最小数据)/组距

    2.x轴刻度

       正常情况下实际组距会是小数,所以刻度需要按照实际组距来,否则或者图形偏移的情况

       实际组距=极差/组数

        刻度列表=[最小数据+实际组距*i for i in range(组数+1)]

    3.频数直方图与频率直方图

            频率分布直方图纵轴表示频率/组距,横轴表示哥组组距,若求某一组的频率,就用纵轴的频率/组距*横轴的组距,即得该组频率。

            频率 = 频数/数据总数

    问题2

    美国人口普查发现有1.24亿人在外工作。根据他们从家到上班地点所需要的时间,通过抽样统计出了下表的数据,这些数据能绘制成直方图吗?

    1 interval = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 60, 90, 150]
    2 width = [5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 30, 60]
    3 quantity = [4180, 13687, 18618, 19634, 17981, 7190, 16369, 3212, 4122, 9200, 6461, 3435]
    4 # 数据来源:https://en.wikipedia.org/wiki/Histogram

    思考这个数据能绘制直方图吗?

    给出的数据是统计之后的数据,所以为了达到直方图的效果,需要绘制条形图。

    结论:一般来说能够使用plthist方法绘制直方图的是那些没有统计过的原始数据

     1  代码
     2 import matplotlib as mpl
     3 import matplotlib.pyplot as plt
     4 
     5 # 设置中文
     6 mpl.rcParams['font.sans-serif'] = ['Fangsong']
     7 mpl.rcParams['font.size'] = 16
     8 # 用条形图模拟直方图
     9 # 数据
    10 interval = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 60, 90, 150]
    11 width = [5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 30, 60]
    12 quantity = [4180, 13687, 18618, 19634, 17981, 7190, 16369, 3212, 4122, 9200, 6461, 3435]
    13 
    14 # 画图
    15 plt.figure(figsize=(20,8))
    16 for i in range(len(width)):
    17     plt.bar([interval[i]+width[i]/2], [quantity[i]], width=width[i], color='orange')
    18 # plt.bar(interval[1:], quantity, width=5)
    19 
    20 # 刻度
    21 plt.xticks(interval)
    22 
    23 # x轴 ,y周的信息
    24 
    25 plt.show()

    其他图形

    matplotlib还可以画其他图形,官网有详细案例,以及代码,在工作中如有需要,再进行查阅。

    官网地址:https://matplotlib.org/gallery/index.html

  • 相关阅读:
    根据输入参数,判定时间范围CheckTimeSpan
    C#登出系统并清除Cookie
    MySQL中使用group_concat遇到的坑
    MySQL中group by 与 order by 一起使用排序问题
    使用VMware安装CentOS 7
    VMware安装Linux提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
    Yii2处理密码加密及验证
    Yii2 的安装及简单使用
    git merge的使用
    PHP中上传文件打印错误,错误类型
  • 原文地址:https://www.cnblogs.com/LWH999/p/11698777.html
Copyright © 2011-2022 走看看