zoukankan      html  css  js  c++  java
  • Matplotlib数据可视化基本操作

          matplotlib是一个Python的2D绘图库,最流行的Python底层绘图库,主要做数据可视化。

          matplotlib使用时需要先导入库,有两种导入方式

    from matplotlib import pyplot as plt
    import matplotlib.pyplot as plt

          绘制一个简单的方程y=2x+1

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-1,1,50)
    y = 2 * x + 1
    plt.plot(x,y)
    plt.show()

          如果有多方函数可以定义多个figure,并指定figure的一些参数,也可以指定所画方程的一些参数

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-3,3,50)
    y1 = 2 * x + 1
    y2 = x ** 2
    plt.figure(num=1) #序号为1的figure
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--') #指定y1方程的颜色,线的宽度为1.0,线的形状为虚线
    plt.figure(num=2,figsize=(8,5)) #序号为2的figure,并指定的这个figure的长为8,高为5
    plt.plot(x,y2)
    plt.show()

          xlim,ylim可以自定义坐标轴的范围。xlabel,ylabel描述x轴、y轴。ticks用来设置坐标轴单位的小标。

    import numpy as np
    x = np.linspace(-3,3,50)
    y1 = 2 * x + 1
    y2 = x ** 2
    plt.figure()
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    plt.plot(x,y2)
    plt.xlim((-1,2)) #x坐标轴的范围
    plt.ylim((-2,3)) #y坐标轴的范围
    plt.xlabel('I am x') #描述x轴
    plt.ylabel('I am y') #描述y轴
    new_ticks=np.linspace(-1,2,5)
    plt.xticks(new_ticks) #对x轴的小标进行修改
    plt.yticks([-2,-1.8,-1,1.22,3],[r'$really bad$','$bad$','$normal$','$good$',r'$really good$'])
    #对y轴的小标进行修改,里面为两个列表,第一个列表为y轴上的数据,第二个列表为y轴上的数据对应的小标
    plt.show()

           对坐标轴进行操作

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-3,3,50)
    y1 = 2 * x + 1
    y2 = x ** 2
    plt.figure()
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    plt.plot(x,y2)
    plt.xlim((-1,2)) #x坐标轴的范围
    plt.ylim((-2,3)) #y坐标轴的范围
    plt.xlabel('I am x') #描述x轴
    plt.ylabel('I am y') #描述y轴
    ax = plt.gca()
    ax.spines['right'].set_color('none') #去掉右边的坐标轴
    ax.spines['top'].set_color('none') #去掉上边的坐标轴
    ax.xaxis.set_ticks_position('bottom') #用下边的坐标轴表示x轴
    ax.yaxis.set_ticks_position('left') #用左边的坐标轴表示y轴
    ax.spines['bottom'].set_position(('data',0)) #设置下边的坐标轴(即x轴)的位置
    ax.spines['left'].set_position(('data',0)) #设置左边的坐标轴(即y轴)的位置
    plt.show()

          legend图例。不指定参数采用默认打印图例用plt.legend(),如果指定参数,handles说明图例的线条,labels用来指定对应线条的名字,loc用来指定legend的位置

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-3,3,50)
    y1 = 2 * x + 1
    y2 = x ** 2
    plt.figure()
    plt.xlim((-1,2)) #x坐标轴的范围
    plt.ylim((-2,3)) #y坐标轴的范围
    plt.xlabel('I am x') #描述x轴
    plt.ylabel('I am y') #描述y轴
    line1, = plt.plot(x,y2,label='up')
    line2, = plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='down')
    plt.legend(handles=[line1,line2],labels=['aaa','bbb'],loc='best')
    plt.show()

          annotation标注

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-3,3,50)
    y = 2 * x + 1
    plt.figure(num=1,figsize=(8,5))
    plt.plot(x,y)
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    ax.spines['bottom'].set_position(('data',0))
    ax.spines['left'].set_position(('data',0))
    x0 = 1
    y0 = 2 * x0 + 1
    plt.scatter(x0,y0,s=50,color='b') #展示(x0,y0)这个点,大小为50,颜色为blue
    plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #(x0,y0)和(x0,0)两个点之间生成一条颜色为黑色的虚线,线宽2.5
    plt.annotate(r'$2x+1=%s$' % y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',
                fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) #arrowprops表示箭头的类型

    plt.text(-3,3,r'$This is some text.mu sigma_i alpha_t$',fontdict={'size':16,'color':'red'})
    plt.show()

           实例:用matplotlib绘制sin(x)和cos(x)的函数图像,其中要包含图例,在x=1处进行标注。

    import matplotlib.pyplot as plt
    import numpy as np
    x = np.linspace(-np.pi,np.pi,256,endpoint=True)
    c = np.cos(x)
    s = np.sin(x)
    plt.figure()
    plt.plot(x,c,color='blue',linewidth=1.0,linestyle='--',label='cos',alpha=0.5)
    plt.plot(x,s,color='red',linewidth=1.0,label='sin',alpha=0.5)
    plt.title('cos & sin')
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    ax.spines['bottom'].set_position(('data',0))
    ax.spines['left'].set_position(('data',0))
    plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
               [r'$- pi$',r'$- pi/2$',r'$0$',r'$+ pi/2$',r'$+ pi$'])
    plt.yticks(np.linspace(-1,1,5,endpoint=True))
    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(16)
        label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.2)) #facecolor为背景颜色,edgecolor为边缘颜色
    plt.legend(loc='best')
    plt.grid() #设置网格线
    plt.fill_between(x,np.abs(x)<0.5,c,c>0.5,color='green',alpha=0.25)
    t=1
    plt.plot([t,t],[0,np.cos(t)],'y',linewidth=3,linestyle='--')
    plt.annotate('cos(1)',xy=(t,np.cos(1)),xycoords='data',xytext=(+10,+30),textcoords='offset points',
                arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
    plt.show()

           scatter散点图

    import matplotlib.pyplot as plt
    import numpy as np
    n = 128
    X = np.random.normal(0,1,n)
    Y = np.random.normal(0,1,n)
    T = np.arctan2(Y,X) #设置颜色
    plt.scatter(X,Y,s=75,c=T,alpha=0.5) #其实s是size的缩写,c是color的缩写,alpha表示透明度
    plt.xlim(-1.5,1.5)
    plt.ylim(-1.5,1.5)
    plt.xticks(()) #将x轴上的小标设置为空
    plt.yticks(()) #将y轴上的小标设备为空
    plt.title('scatter')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()

          bar柱状图

    import matplotlib.pyplot as plt
    import numpy as np
    n = 12
    X = np.arange(n)
    Y1 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)
    Y2 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)
    plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') #+Y1表示向上
    plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white') #-Y2表示向下
    for x,y in zip(X,Y1):
        plt.text(x,y+0.05,'%.2f' %y,ha='center',va='bottom') #ha表示横向对齐,va表示纵向对齐
    for x,y in zip(X,Y2):
        plt.text(x,-y-0.05,'%.2f' %y,ha='center',va='top')
    plt.xlim(-0.5,n)
    plt.xticks(())
    plt.ylim(-1.25,1.25)
    plt.yticks(())
    plt.show()

           更详细的内容可以参照 https://mp.weixin.qq.com/s/e_JICIHfp5ZTdX9PTx6FQw

  • 相关阅读:
    iOS-微信分享多张图片(UIActivityViewController多图分享和多图分享失败)
    java jvm设置http代理参数
    TCP加速锐速SS(ServerSpeeder)破解版一键安装
    Rectified/无限流量/KVM/1G内存/亚洲优化/月付3.99刀起/商家首次续费优惠/91yun第600篇博文
    在Centos7上安装配置ss-libev Proxifier
    需要序列化的类中没有写serialVersionUID的解决办法
    湖南卫视直播
    修改postfix smtp端口,防止公网扫描浪费你的服务器流量
    亚马逊aws 一个实例双网卡-两个弹性ip设置
    智读App-免费下载付费知识节目攻略
  • 原文地址:https://www.cnblogs.com/chenjin2018/p/13378679.html
Copyright © 2011-2022 走看看