美文网首页
一、Matplotlib基础知识

一、Matplotlib基础知识

作者: 垃圾桶边的狗 | 来源:发表于2019-05-21 00:06 被阅读0次
    pd.scatter_matrix(DataFrame)
    

    Matplotlib中的基本图表包括的元素

    • x轴和y轴
      水平和垂直的轴线
    • x轴和y轴刻度
      刻度标示坐标轴的分隔,包括最小刻度和最大刻度
    • x轴和y轴刻度标签
      表示特定坐标轴的值
    • 绘图区域
      实际绘图的区域
    import numpy as np
    
    import matplotlib.pyplot as plt
    %matplotlib inline
    

    只含单一曲线的图

    # pandas 绘制图形,调用plot
    # plt 导包,绘制图形,调用plot方法,就可以绘制
    # 正弦波
    x = np.linspace(0,2*np.pi,100)
    
    y = np.sin(x)
    display(x,y)
    
    # l = plt.plot(x,y)
    # l[0]
    
    # 列表中数据只有一个,取出来,声明一下,后面+,取出对象
    line, = plt.plot(x,y)
    line
    
    26.png

    包含多个曲线的图

    1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线

    plt.plot(x,y)
    
    plt.plot(x,np.cos(x))
    
    16.png

    2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线

    line1,line2 = plt.plot(x,y,x,np.cos(x))
    
    display(line1,line2)
    
    05.png
    # 高级语言中方法中参数,[该参数可有可无]
    plt.plot(x,y)
    
    8.png
    plt.plot(y)
    
    81.png

    网格线

    绘制正选余弦

    plt.plot(x,y)
    plt.grid(True)
    
    weww.png

    使用plt.grid(True)方法为图添加网格线
    设置grid参数(参数与plot函数相同),使用plt面向对象的方法,创建多个子图显示不同网格线
    [图片上传失败...(image-abd188-1558368389415)]

    • lw代表linewidth,线的粗细
    • alpha表示线的明暗程度
    • color代表颜色
    plt.figure(figsize=(12,3))
    
    # 第一个子视图
    axes = plt.subplot(1,3,1)
    axes.plot(x,y)
    axes.grid(True)
    
    # 第二个子视图
    axes = plt.subplot(1,3,2)
    axes.plot(x,y)
    axes.grid(True,color = 'red')
    
    
    # 第三个子视图
    axes = plt.subplot(1,3,3)
    axes.plot(x,y)
    axes.grid(True,color = 'purple',linestyle = '--',alpha = 0.3)
    
    1256.png

    坐标轴界限

    axis方法

    如果axis方法没有任何参数,则返回当前坐标轴的上下限axis(xmin =,ymax = )

    plt.plot(x,y)
    plt.axis([-5,10,-2,2])
    
    06.png
    plt.axis('xxx') 'tight'、'off'、'equal'……

    设置坐标轴类型
    关闭坐标轴

    f = lambda x:(1 - x**2)**0.5
    
    X = np.linspace(-1,1,100)
    
    plt.plot(X,f(X),X,-f(X))
    
    # 相等,横纵坐标刻度相等
    plt.axis('equal')
    
    23.png
    X = np.linspace(0,2*np.pi,100)
    s = np.sin(X)
    c = np.cos(X)
    plt.plot(s,c)
    _ = plt.axis('equal')
    
    1345.png
    plt.imshow(cat)
    # off关闭,刻度
    plt.axis('off')
    
    qwe20.png

    xlim方法和ylim方法

    除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围

    65406.png

    坐标轴标签

    xlabel方法和ylabel方法  
    plt.ylabel('y = x^2 + 5',rotation = 60)旋转
    
    21e56.png

    标题

    title方法

    plt.plot(x,y)
    
    plt.xlabel('X',color = 'red',fontsize = 20)
    
    plt.ylabel('f(x) = sin(X)',rotation = -60,fontsize = 20)
    
    # 中文没有正常展示,字体类型,默认类型,电脑,缺失字体
    plt.title('正弦波',fontproperties = 'SimHei',fontsize = 25)
    
    2352.png

    图例

    legend方法

    两种传参方法:

    • 【推荐使用】在plot函数中增加label参数
    • 在legend方法中传入字符串列表
    plt.plot(x,y,x,np.cos(x))
    
    # 图例标注一线那条线是哪条
    plt.legend(['sin','cos'])
    
    6624.png
    plt.plot(x,y,label = 'sin')
    
    plt.plot(x,np.cos(x),label = 'cos')
    
    # 图例显示,必须调用legend
    plt.legend()
    
    157.png
    label参数为'_xxx',则图例中不显示  
    plt.plot(x, x*1.5, label = '_xxx')
    
    1253.png
    plt.plot(x,y,label = 'sin')
    
    plt.plot(x,np.cos(x),label = 'cos')
    
    # 图例显示,必须调用legend
    plt.legend(loc = 8)
    
    2328.png

    loc参数可以是2元素的元组,表示图例左下角的坐标

    plt.plot(x,y,label = 'sin')
    
    plt.plot(x,np.cos(x),label = 'cos')
    
    # 图例显示,必须调用legend
    # loc元组(数值,单位图片一个宽度和一个高度)
    plt.legend(loc = (0.5,1.1))
    
    7.png

    图例也可以超过图的界限loc = (-0.1,0.9)

    ncol参数

    ncol控制图例中有几列

    plt.plot(x,y,label = 'sin')
    
    plt.plot(x,np.cos(x),label = 'cos')
    
    # 图例显示,必须调用legend
    plt.legend(ncol = 2,loc = (0,1))
    
    24.png
    55.png
    x1 = x[::5]
    y1 = y[::5]
    
    ''' linestyle or ls: ['solid' | 'dashed', 'dashdot', 'dotted' | (offset, on-off-dash-seq)
    | ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'None'`` | ``' '`` | ``''``]'''
    plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
    
    45.png
    10.png
    plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
    
    # density pixel(像素):像素密度
    plt.savefig('./img.pdf',dpi = 500,facecolor = 'red')
    
    56.png
    plt.figure(facecolor='red')
    plt.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
    
    34.png
    # 一个子视图
    # 想要背景红色,需要subplot这个方法进行设置
    axes = plt.subplot(111,facecolor = 'red')
    axes.plot(x1,y1,color = 'green',linestyle = '-.',marker = '*',markersize = 15.2)
    # show显示,调用不调用都能展示,调用,创建一个新的绘图对象
    plt.savefig('img4.png')
    plt.show()
    
    07.png

    二、设置plot的风格和样式

    plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
    plt.plot(X, Y, 'format', ...)

    40.png
    0xff
    

    255

    # 红绿蓝
    plt.plot(x,y,c = '#88eeaa')
    
    31.png
    plt.plot(x,y,c = np.random.rand(3))
    
    03.png
    透明度

    alpha参数


    41.png

    19.png
    plt.plot(x,y,ls = 'steps')
    
    56.png
    线宽

    linewidth或lw参数


    w33.png
    不同宽度的破折线

    dashes参数
    设置破折号序列各段的宽度

    218.png
    39.png
    plt.plot(x[::5],y[::5],marker = '4',markersize = 15)
    
    34.png
    41.png
    plt.plot(x[::5],y[::5],marker = 'h',markersize = 15)
    
    16.png
    36.png
    plt.plot(x[::5],y[::5],marker = '+',markersize = 15)
    
    15.png 36.png
    plt.plot(x[::5],y[::5],marker = 'D',markersize = 15)
    
    23.png 239.png
    59.png
    plt.plot(x[::5],y[::5],marker = '_',markersize = 15)
    
    2333.png 57.png
    plt.plot(x[::5],y[::5],marker = '>',markersize = 15)
    
    32.png

    多参数连用

    颜色、点型、线型

    plt.plot(x1,y1,color = 'red',ls = '--',marker = '*')
    
    4.11.png
    # 多参数连用
    plt.plot(x1,y1,'g-.*')
    
    48.png
    23.22.png
    plt.plot(x1,y1,color  = 'red',alpha = 0.8,
             ls = '--',marker = '*',markersize=15,
             markerfacecolor = 'green',markeredgecolor = 'purple',
             markeredgewidth = 2)
    
    23.png

    在一条语句中为多个曲线进行设置

    多个曲线同一设置

    属性名声明
    plt.plot(x1, y1, x2, y2, fmt, ...)

    plt.plot(x,y,x,np.cos(x),color = 'green',ls = 'steps',alpha = 0.8)
    
    210.png
    多个曲线不同设置

    多个都进行设置时,无需声明属性
    plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)

    plt.plot(x,y,'r--*',x,np.cos(x),'g-.o')
    
    200.png
    使用setp()方法
    # 模块plt的方法
    line, = plt.plot(x[::5],y[::5])
    
    plt.setp(line,color = 'purple',marker = 'd')
    

    X、Y轴坐标刻度

    xticks()和yticks()方法

    plt.plot(x,y)
    
    _ = plt.yticks([-1,0,1],['min',0,'max'])
    
    # np.arange(7) :[0,1,2,3,4,5,6]
    _ = plt.xticks(np.arange(7),list('abcdefg'),fontsize = 25,color = 'r',rotation = -60)
    
    22.png

    面向对象方法

    set_xticks、set_yticks、set_xticklabels、set_yticklabels方法


    正弦余弦

    LaTex语法,用\pi等表达式在图表上写上希腊字母

    plt.plot(x,y)
    
    # matplotlib中拉丁字母显示$\pi$
    _ = plt.xticks([0,np.pi/2,np.pi,3*np.pi/2,2*np.pi],['$\gamma$','$\pi$/2','$\pi$','3$\pi$/2','2$\pi$'],fontsize = 30)
    
    55.png

    直方图

    【直方图的参数只有一个x!!!不像条形图需要传入x,y】
    hist()的参数

    • bins
      可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
    • normed
      如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
    • color
      指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色
    • orientation
      通过设置orientation为horizontal创建水平直方图。默认值为vertical
    wind = np.load('./Ravenna_wind.npy')
    wind
    
    24.png
    plt.hist(wind,bins = 8,rwidth = 0.5,range=[0,360])
    
    54.png

    条形图

    【条形图有两个参数x,y!】
    bar()、barh()

    # x = np.arange(10)
    x = np.arange(0,100,10)
    y = np.random.randint(0,100,size = 10)
    plt.bar(x,y,width = 5)
    
    253.png

    水平条形图

    barh()

    plt.barh(x,y,height = 5)
    
    56.png

    饼图

    【饼图也只有一个参数x!】
    pie()
    饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小

    普通各部分占满饼图

    plt.pie([0.3,0.4,0.2,0.1])
    
    plt.axis('equal')
    
    23.png

    饼图阴影、分裂等属性设置
    labels参数设置每一块的标签;labeldistance参数设置标签距离圆心的距离(比例值)
    autopct参数设置比例值的显示格式(%1.1f%%);pctdistance参数设置比例值文字距离圆心的距离
    explode参数设置每一块顶点距圆形的长度(比例值);colors参数设置每一块的颜色;
    shadow参数为布尔值,设置是否绘制阴影

    x = np.array([0.2,0.3,0.15,0.15,0.1,0.1])
    
    labels = np.array(['A','B','C','D','E','F'])
    plt.figure(figsize=(5,5))
    _ = plt.pie(x,labels = labels,autopct='%0.1f%%',
                pctdistance=0.5,explode = [0,0.1,0,0.2,0,0],shadow =True )
    
    plt.savefig('./pie.png')
    
    22.png
    startangle设置旋转角度
    

    散点图

    【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】
    scatter()

    x = np.random.randint(0,100,size = 100)
    y = np.random.randint(0,100,size = 100)
    # scatter调整大小参数s不是size
    # scatter就是显示两列数据之间的关系
    plt.scatter(x,y,s = np.random.randint(10,60,size = 100),c = np.random.rand(100,3))
    
    02.png

    四、图形内的文字、注释、箭头

    234.png

    图形内的文字

    text()
    使用figtext()

    注释

    annotate()
    xy参数设置箭头指示的位置,xytext参数设置注释文字的位置
    arrowprops参数以字典的形式设置箭头的样式
    width参数设置箭头长方形部分的宽度,headlength参数设置箭头尖端的长度,
    headwidth参数设置箭头尖端底部的宽度,
    facecolor设置箭头颜色
    shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)

    箭头

    plt.figure(figsize=(12,9))
    plt.axis([0, 10, 0, 20]);
    arrstyles = ['-', '->', '-[', '<-', '<->', 'fancy', 'simple', 'wedge']
    for i, style in enumerate(arrstyles):
        plt.annotate(style, xytext=(1, 2+2*i), xy=(4, 1+2*i), arrowprops=dict(arrowstyle=style));
    
    connstyles=["arc", "arc,angleA=10,armA=30,rad=30", "arc3,rad=.2", "arc3,rad=-.2", "angle", "angle3"]
    for i, style in enumerate(connstyles):
        plt.annotate(style, xytext=(6, 2+2*i), xy=(8, 1+2*i), arrowprops=dict(arrowstyle='->', connectionstyle=style));
    plt.show()
    
    35.png

    创建极坐标条形图

    count,range_ = np.histogram(wind,bins = 8,range=[0,360])
    display(count,range_)
    
    plt.bar(x = range_[:-1],height = count,width = 22.5)
    
    243.png
    
    # 角度值,表示横坐标0 ~ 360
    # 0 ~ 2*np
    # 一行代码,就极坐标出来
    # 玫瑰图
    plt.axes(polar = True)
    
    # 条形图
    x = np.arange(0,2*np.pi,np.pi/4)
    plt.bar(x = x,height = count,width = np.pi/4,color = np.random.rand(8,3))
    
    1205.png

    相关文章

      网友评论

          本文标题:一、Matplotlib基础知识

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