美文网首页
matplotlib入门

matplotlib入门

作者: 钉某人 | 来源:发表于2020-03-20 16:39 被阅读0次

    Matplotlib 是一个 Python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
    https://matplotlib.org/

    1.matplotlib.rcParams
    rcParams是matplotlib存放配置的字典,设置绘图相关的配置,可能会遇到中文不能显示的问题,在这里处理
    定制Matplotlib使用样式表和rcParams
    https://matplotlib.org/tutorials/introductory/customizing.html?highlight=rcparams
    文档有很多设置相关的说明,我们这里设置

    plt.rcParams['font.sans-serif']=['SimHei']  中文支持
    plt.rcParams['axes.unicode_minus']=False  正常显示负号
    
    plt.rcParams['lines.linewidth']=5  设置线条宽度
    plt.rcParams['lines.color']='red'  设置线条颜色
    plt.rcParams['lines.linestyle']='-' 设置线条样式
    
    
    

    2.plt.hist(data) 绘制直方图

    # 
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    %matplotlib inline  # 设置Jupiter notebook输出图像
    
    height = [168,155,182,170,173,161,155,173,176,181,166,172,170] # 数据
    bins = range(150, 191, 5) # 横坐标的区间,纵坐标自动统计区间内的数据
    
    plt.hist(height, bins=bins)
    plt.show()
    
    image.png

    3.plt.bar(x,y) 绘制条形图

    import matplotlib.pyplot as plt
    
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    x = [1, 2, 3]  # 横坐标
    name = ['一班', '二班', ' 三班']
    y = [70, 80, 90]  # 纵坐标
    plt.bar(x, y)
    
    plt.title('三班成绩柱状图')  # 标题
    plt.xlabel('班级')  # 横坐标标题
    plt.ylabel('成绩')  # 纵坐标标题
    plt.xticks(x, name)  # 将横坐标与文字相关联
    plt.text(1, 70, '70')  # 在指定位置添加文字,参数(横坐标,纵坐标,文本)
    for i in range(1, 4):
        plt.text(i, y[i - 1], y[i - 1])
    plt.show()
    
    image.png

    4.plt.plot(x,y) 绘制折线图

    import matplotlib.pyplot as plt
    
    year = range(2005, 2020)
    height = [157, 160, 162, 163, 167, 170, 173, 175, 174, 179, 182, 182, 182, 182, 183]
    
    plt.plot(year, height)
    plt.show()
    
    image.png

    5.plt.pie(data) 绘制饼图

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    flowers = ['菊花', '玫瑰花', '栀子花', '牡丹', '月季花', '昙花']  # 标签
    data = [300, 345, 980, 102, 684, 234]
    
    plt.pie(data, labels=flowers, autopct='%1.1f%%')  # 第二个%表示转译,第三个%表示输出%
    plt.show()
    
    
    image.png

    6.plt.scatter(x,y)绘制散点图,是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随变量而变化的大致趋势

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    plt.title('超市商品价位与销售散点图')  # 标题
    plt.xlabel('价格(元)')  # 横坐标备注
    plt.ylabel('销量(件)')  # 纵坐标备注
    
    data = [[18.9, 10.4], [21.3, 8.7], [19.5, 11.6], [20.5, 9.7], [19.9, 9.4], [22.3, 11], [21.4, 10.6], [9, 9.4],
            [10.4, 9], [9.3, 11.3], [11.6, 8.5], [11.8, 10.4], [10.3, 10],
            [8.7, 9.5], [14.3, 17.2], [14.1, 15.5], [14, 16.5], [16.5, 17.7], [15.1, 17.3], [16.4, 15], [15.7, 18]]
    X = [item[0] for item in data]
    Y = [item[1] for item in data]
    print('x:{0},y:{1}'.format(X, Y))
    
    # 在固定位置插入文字
    plt.text(16, 16, '牙膏')
    plt.text(10, 12, '洗衣液')
    plt.text(20, 10, '牙刷')
    
    plt.scatter(X, Y)
    plt.show()
    
    
    image.png

    7.plt.boxplot(data)箱线图

    import matplotlib.pyplot as plt
    
    data = [77, 70, 72, 89, 89, 70, 90, 87, 94, 63, 81, 99, 94, 80, 95, 67, 65, 88, 60, 67, 85, 88, 87, 75, 62, 65, 95, 62,
            61, 93, 30]
    plt.boxplot(data)
    plt.show()
    
    image.png

    8.projection='polar' 绘制极线图

    import matplotlib.pyplot as plt
    
    r = [1,2,3,4,5]  # 极径
    theta = [0.0,1.573453543,3.1445345343,4.713424224,6.283423424]  # 角度
    
    ax = plt.subplot(111, projection='polar')
    ax.plot(theta,r)
    plt.show()
    
    image.png

    9.plt.step(x,y) 绘制阶梯图,既能反映数据发展趋势,还能反映数据的持续时间

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    plt.xlabel('年份')
    plt.ylabel('数量')
    
    year = range(2005, 2020)  # 时间
    height = [157, 160, 162, 163, 167, 170, 173, 175, 174, 179, 182, 182, 182, 182, 183]  # 数据
    
    plt.step(year, height)
    plt.show()
    
    
    image.png

    10.绘制柱状堆积图,常用于综合展示不同分类的指标趋势以及它们总和的趋势

    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    n = 5
    number = ['1', '2', '3', '4', '5']
    ch = [72, 80, 66, 77, 92]
    math = [62, 92, 72, 75, 88]
    eng = [76, 81, 73, 75, 80]
    
    plt.bar(range(1,6), ch,color='r',label='chinese')
    plt.bar(range(1,6),math,bottom=ch,color='g',label='math')
    chmath = [ch[i] + math[i] for i in range(5)]
    plt.bar(range(1,6),eng,bottom=chmath,color='b',label='eng')
    
    plt.show()
    
    image.png

    11.绘制分块图,分块图将不同数据集进行并列显示,通常可用于对同一方面的不同主体进行比较
    plt.bar(x,y,width=0.4,fc='r') x:横坐标。y:纵坐标 width:宽度 fc:颜色

    import matplotlib.pyplot as plt
    
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    name_list = ['语文', '数学', '英语']
    c1 = [81.4, 83, 87.1]  # 一班的三科成绩
    c2 = [85.6, 87.4, 90]
    c3 = [78, 81.2, 86.1]
    
    width = 0.4
    
    x = [1, 3, 5]
    plt.bar(x, c1, label='一班', fc='r', width=width)
    
    x = [1.4, 3.4, 5.4]
    plt.bar(x, c2, label='二班', fc='g', width=width)
    
    x = [1.8, 3.8, 5.8]
    plt.bar(x, c3, label='三班', fc='b', width=width)
    
    # 语文等标签在y轴显示,并剧中
    x = [1.4, 3.4, 5.4]
    plt.xticks(x, name_list)
    plt.title('三班成绩图')
    plt.ylabel('成绩')
    plt.xlabel('科目')
    plt.legend()
    plt.show()
    
    
    image.png

    11.绘制气泡图 plt.scatter(x,y,s=z) x:横坐标,y:纵坐标, s:气泡大小

    import matplotlib.pyplot as plt
    import random
    plt.rcParams['font.sans-serif'] = ['Songti SC']  # 用来正常显示中文标签,mac系统和window系统支持的字体不同
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    x = []  # x坐标
    y = []  # y坐标
    z = []  # 气泡大小
    for i in range(50):
        x.append(random.randint(20, 60))
        y.append(random.randint(160, 200))
        z.append(random.randint(70, 500))
    
    plt.scatter(x, y, s=z)  # s来控制气泡大小
    plt.title('20~60岁之间身高和体重的关系')
    plt.xlabel('年龄')
    plt.ylabel('身高')
    plt.show()
    
    
    image.png

    相关文章

      网友评论

          本文标题:matplotlib入门

          本文链接:https://www.haomeiwen.com/subject/nlmdyhtx.html