zoukankan      html  css  js  c++  java
  • Matplotlib模块:绘图和可视化

    Matplotlib简介

    Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。

    导入库

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from pandas import Series,DataFrame
    #内嵌画图
    %matplotlib inline
    #绘图时可以显示中文
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False

    常用方法

    设置图像标题:plt.title()
    设置x轴名称:plt.xlabel()
    设置y轴名称:plt.ylabel()
    设置x轴范围:plt.xlim()
    设置y轴范围:plt.ylim()
    设置x轴刻度:plt.xticks()
    设置y轴刻度:plt.yticks()
    设置曲线图例:plt.legend()

    画布与子图

    画布:figure
    
    fig = plt.figure()
    图:subplot
    
    ax1 = fig.add_subplot(2,2,1)
    调节子图间距:
    
    subplots_adjust(left, bottom, right, top, wspace, hspace)
    
    plt.figure(figsize=(6,8))
    表示figure 的大小为宽、长(单位为inch)
    plt.subplot(121)
    表示整个figure分成1行2列,共2个子图,这里子图在第一行第一列
    plt.subplot(122)
    表示子图在第一行第二列

    画折线图

    图一

    plot函数:绘制折线图
    
    线型linestyle(-,-.,--,..)
    点型marker(v,^,s,*,H,+,x,D,o,…)
    颜色color(b,g,r,y,k,w,…)
    
    plt.plot([1,2,3,4],[2,3,1,8],color="red",linestyle="--",marker="*" ,label='lineA') # 画折线()
    plt.plot([1,2,3,4],[2,4,6,9],color="blue",linestyle="-",marker="o" ,label='lineB')
    plt.title('matplotlib Test')
    plt.xlabel('XLabel')
    plt.ylabel('YLabel')
    plt.xlim(0,6) # x轴刻度范围
    plt.ylim(0,10) # y轴刻度范围
    plt.xticks(np.arange(0,7,2))
    plt.legend()

     常用参数

     

        线条方式

      点型

    图二

    fig = plt.figure()
    ax1 = fig.add_subplot(1,2,1) 
    #参数一:子图总行数,子图总列数,子图位置
    ax1.plot([1,2,3,4],[7,9,10,8],label='ax1')
    ax2 = fig.add_subplot(1,2,2)
    ax2.plot([1,2,3,4],[2,4,6,8],label='ax2')
    ax1.legend()
    ax2.legend()
    plt.show()

     图三

    x=np.linspace(-3,3,50) #在(-3,3)之间生成50个样本数
    y1=2*x+1
    y2=x**2
    plt.figure(num=1,figsize=(10,5)) #定义编号为1,大小为(10,5)
    plt.plot(x,y1,color='red',linewidth=2,linestyle='--')   #颜色线宽及格式
    plt.plot(x,y2)
    plt.xlim(-1,2) #x轴的范围
    plt.ylim(-2,3) #y轴的范围
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    plt.show()

     移动坐标轴

    x=np.linspace(-3,3,50) #在(-3,3)之间生成50个样本数
    y1=2*x+1
    y2=x**2
    plt.figure(num=2,figsize=(8,5)) #定义编号为2,大小为(8,5)
    plt.plot(x,y1,color='red',linewidth=2,linestyle='--')  
    plt.plot(x,y2)
    plt.xlim(-1,2) #x轴的范围
    plt.ylim(-2,3) #y轴的范围
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    
    new_ticks=np.linspace(-1,2,5)  #-1到2分成5段,包含端点
    print(new_ticks)
    plt.xticks(new_ticks)  #进行替换新下标
    plt.yticks([-2,-1,0,1,2,],
              [r'$really bad$','$bad$','$0$','$well$','$really well$'])
    
    
    ax=plt.gca()  #get current axis
    ax.spines['right'].set_color('none') #边框属性设置为None 不显示
    ax.spines['top'].set_color('none')
    
    
    ax.xaxis.set_ticks_position('bottom')  #设置x坐标刻度数字或名称的位置,所有属性为:top,bottom,both,default,none
    ax.spines['bottom'].set_position(('data',0)) # 设置.spines边框x轴,设置.set_position设置边框的位置,y=0位置;位置所有属性有outward,axes,data
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0)) #坐标中心点在(0,0)位置

     图例变化

    x=np.linspace(-3,3,50)
    y1=2*x+1
    y2=x**2
    plt.figure(num=2,figsize=(8,5))
    plt.xlim(-1,2)
    plt.ylim(-2,3)
    
    new_ticks=np.linspace(-1,2,5) 
    plt.xticks(new_ticks)
    plt.yticks([-2,-1,1,2,],
              [r'$really bad$','$bad$','$well$','$really well$'])
    
    l1,=plt.plot(x,y1,color='red',linewidth=2,linestyle='--',label='linear line')
    l2,=plt.plot(x,y2,label='square line') 
    
    #单独修改label的信息
    plt.legend(loc='upper left',handles=[l1,l2],labels=['up','down']) #显示在左上位置
    
    
    plt.show() #显示图
    
    #loc参数
    best  
    upper right  
    upper left  
    lower left  
    lower right  
    right  
    center right  
    lower center  
    upper center  
    center

    bar图

    data=[20,30,40,50]
    labels=['Jan','Feb','Mar','Apr']
    plt.bar(np.arange(len(data)),data,width=.3)
    plt.xticks(np.arange(len(data)),labels)
    plt.show()

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 数据
    N = 5
    x = [20, 10, 30, 25, 15]
    y = np.arange(N)
    
    # 绘图 y= y轴, left= 水平条的底部, height 水平条的宽度, width 水平条的长度
    p1 = plt.barh(y, left=0, height=0.5, width=x)
    
    # 展示图形
    plt.show()

    N = 5
    y = [20, 10, 30, 45, 15]
    x = np.arange(N)
    # 添加地名坐标
    str1 = ("北京", "上海", "武汉", "深圳", "重庆")
    plt.figure(num=2,figsize=(10,5)) #定义编号为2,大小为(8,5)
    
    # 绘图 x x轴, height 高度, 默认:color="blue", width=0.8
    p1 = plt.bar(x, height=y, width=0.5, label="城市指标", tick_label=str1)
    
    # 添加数据标签
    for a, b in zip(x, y):
        plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=11)
    
    # 添加图例
    plt.legend()
    
    # 展示图形
    plt.show()

     pie图

    plt.pie([10,20,30],labels=['x','y','z'],autopct='%.2f%%',explode=[0.1,0,0.1])
    plt.axis('equal')
    plt.show()

  • 相关阅读:
    Arduino系列之智能家居蓝牙语音遥控灯(四)
    Arduino系列之光照传感器(三)
    address2line 定位 Android c++奔溃位置
    android UI线程安全问题
    android 后台服务定时通知
    eclipse 完全智能提示
    IOS 7 Xcode 5 免IDP证书 真机调试(转载)
    DS5 调试 android c++
    javap -s 查看java方法签名
    ndk-stack 调试 android c++ 代码崩溃位置
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/11551102.html
Copyright © 2011-2022 走看看