zoukankan      html  css  js  c++  java
  • 第三十九篇 matplotlib模块

    matplotlib模块

    绘图库,可以创建常用的统计图(条形图、箱型图、折线图、散点图和直方图)

    bar() 条形图

    # 由于该模块不识别中文,所以我们需要导入一个中文简体字文件
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='B:\msyh.ttc')   # 在文件B中找字体文件
    
    # 修改背景为条纹
    plt.style.use('ggplot')
    
    classes = ['1班','2班','3班','4班']    # 班级
    classes_index = range(len(classes))   # 班级索引
    # print(type(classes_index))   <class 'range'>
    # print(list(classes_index))    [0, 1, 2, 3]
    student_amounts = [43, 55, 60, 36]   # 各班人数
    
    
    # figure中的参数figsize 控制画布大小
    # 生成画布
    fig = plt.figure()    # fig:打扮  figure:图形,画像
    
    # 设置画布
    # 1,1,1表示一张画布切割成1行1列共一张图的第1个;
    # 2,2,1表示一张画布切割成2行2列共4张图的第一个(左上角)
    axl = fig.add_subplot(1,1,1)    # subplot:陪衬   axl:光束轴
    
    # 生成柱状图,bar:条、棒
    axl.bar(classes_index,student_amounts,align='center',color='blue')
    
    # 在底部生成x轴
    axl.xaxis.set_ticks_position('bottom')   #bottom:底部  xaxis:横轴
    
    # 在左边生成y轴
    axl.yaxis.set_ticks_position('left')     # left:左边 yaxis:纵轴
    
    # 将班级文字放在班级索引上
    # xticks:设置柱的文字说明  #ticks:十字叉
    plt.xticks(classes_index,classes,rotation=0,fontsize=13,fontproperties=font)
    
    # x轴上放班级
    plt.xlabel('班级',FontProperties=font,fontsize=15)
    
    # y轴上放学生人数
    plt.ylabel('学生人数',FontProperties=font,fontsize=15)
    
    # 画布标题
    plt.title('班级-学生人数',FontProperties=font,fontsize=15)
    
    # 展示图形
    plt.show()
    

    hist() 直方图

    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='B:\msyh.ttc')
    import numpy as np
    
    plt.style.use('ggplot')
    
    # 自定义两个值
    mu1,mu2 = 50,100
    
    # 用于改造随机数,让它符合正态分布的需要
    sigma = 10
    
    # 构造均值为50的符合正态分布的数据
    x1 = mu1 + sigma*np.random.randn(10000)
    x2 = mu2 + sigma*np.random.randn(10000)
    
    # 生成画布
    fig = plt.figure()
    
    # 设置画布
    # 将画布分成一行两列,取第一部分画图(也就是在左边画)
    axl1 = fig.add_subplot(121)
    
    #bins=50表示每个变量的值分成50份,即会有50根柱子
    axl1.hist(x1, bins=50, color='darkgreen')   # 深绿
    
    
    # 将画布分成一行两列,取第二部分画图(也就是在右边画)
    axl2 = fig.add_subplot(122)
    axl2.hist(x2, bins=50, color='orange')    # 橙色
    
    # 大标题
    fig.suptitle('两个正态分布', fontproperties=font, fontweight='bold', fontsize=15)
    
    # 第一个图的标题
    axl1.set_title('绿色的正态分布', fontproperties=font)
    
    # 第二个图的标题
    axl2.set_title('橙色的正态分布', fontproperties=font)
    # 展示
    plt.show()
    

    plot() 折线图

    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='B:\msyh.ttc')
    plt.style.use('ggplot')
    import numpy as np
    from numpy.random import randn
    
    # 随机数种子,固定一个变量的随机数永远不变,只能对同一个变量起作用
    np.random.seed(1)
    
    # 使用numpy的累加和,保证数据取值范围不会在(0,1)内波动
    # 定义足够的一维数组,每个数组都用于生成一条折线图
    plot_data1 = randn(40).cumsum()
    plot_data2 = randn(40).cumsum()
    plot_data3 = randn(40).cumsum()
    plot_data4 = randn(40).cumsum()
    
    # 通过数据绘制折线图
    plt.plot(plot_data1, marker='o', color='red', linestyle='-', label='红实线')
    plt.plot(plot_data2, marker='x', color='orange', linestyle='--', label='橙虚线')
    plt.plot(plot_data3, marker='*', color='yellow', linestyle='-.', label='黄点线')
    plt.plot(plot_data4, marker='s', color='green', linestyle=':', label='绿点图')
    # label :标签,就是标注
    
    # loc = 'best'表示给label(标签)自动选择最好的位置
    plt.legend(loc='best',prop=font)
    
    plt.show()
    

    scatter() 散点图+直线图

    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    font = FontProperties(fname='B:\msyh.ttc')
    
    # 设置画布背景为网格
    plt.style.use('ggplot')
    import numpy as np
    from numpy.random import randn
    
    # 创建一个一维数组
    x = np.arange(1,20,1)
    
    # 拟合一条水平散点线
    # 合并两个一维数组,得到一个新的数组,用于绘图
    np.random.seed(1)   # 随机数种子
    y_linear = x+10*np.random.randn(19)   # 随机数组
    
    # 拟合一条x²的散点线
    # 第二个用于散点绘图和直线绘图的数组
    y_quad = x**2+10*np.random.randn(19)
    
    # 生成画布
    fig = plt.figure()
    
    # 设置画布
    # 将画布分成一行两列,在第一个部分作图
    ax1 = fig.add_subplot(121)
    
    # 生成散点图,x为横坐标数据,y_linear和y_quad为纵坐标数据
    plt.scatter(x, y_linear, s=30, color='r', label='蓝点')
    plt.scatter(x, y_quad, s=100, color='b', label='红点')
    
    # 第二部分画直线图
    ax2 = fig.add_subplot(122)
    
    # 生成直线图(折线图),x为横坐标数据,y_linear和y_quad为纵坐标数据
    plt.plot(x, y_linear, color='r')
    plt.plot(x, y_quad, color='b')
    
    # 限制x轴和y轴的范围取值
    plt.xlim(min(x)-1, max(x)+1)
    plt.ylim(min(y_quad)-10, max(y_quad)+10)
    
    # 画布大标题
    fig.suptitle('散点图+直线图', fontproperties=font, fontsize=20)
    
    # 左画布标题
    ax1.set_title('散点图', fontproperties=font)
    
    # 左画布图例,指label(标题),去掉的话将不显示
    ax1.legend(prop=font)
    
    # 右画布标题
    ax2.set_title('直线图', fontproperties=font)
    
    # 展示
    plt.show()
    
  • 相关阅读:
    python完成简单购物功能
    Java对字符串进行加密
    python完成留言板功能
    webpack4 学习
    webpack学习之 vue-cli3和4
    节点操作
    new 做了什么
    从url输入网址后发生什么
    防抖节流
    BFC原理和解决方案
  • 原文地址:https://www.cnblogs.com/itboy-newking/p/11041720.html
Copyright © 2011-2022 走看看