zoukankan      html  css  js  c++  java
  • Matplotlib学习

    前言

    在B站上把莫烦的Matplotlib教学视频刷一遍

    正文

    一、

    首先是Matplotlib的基本用法

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

    首先上述代码如果是在jupyter notebook中执行的,那么注释掉的两行就要至少放一行在这里,才会出现独立的图片,否则会是内嵌在jupyter notebook里;

    当然,如果是单独运行一个py文件,那么上述这两行就不能写上去,否则要报错;

    二、

    接着是figure的使用方法,figure是设定指定窗口来画图,多个figure有多个图片,也可以在一个figure里画好几条线

    %matplotlib qt5
    x = np.linspace(-3,3,50)
    y1 = 2*x+1
    y2 = x**2
    
    plt.figure()
    plt.plot(x,y1)
    
    plt.figure(num=3,figsize=(8,5))
    plt.plot(x,y2)
    #plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    
    plt.show()

     

    表示两个figure生成两个图片,其中第二个图片设定为序号3,并且长和宽也指定

    同样,当我需要在一个图片里放两条线时,只需

    %matplotlib qt5
    x = np.linspace(-3,3,50)
    y1 = 2*x+1
    y2 = x**2
    
    plt.figure()
    plt.plot(x,y1)
    
    plt.figure(num=3,figsize=(8,5))
    plt.plot(x,y2)
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    
    plt.show()

    三、

    坐标轴修改

    首先我们看一下怎样限定x和y轴的坐标范围:

    %matplotlib qt5
    x = np.linspace(-3,3,50)
    y1 = 2*x+1
    y2 = x**2
    
    plt.figure()
    plt.plot(x,y2)
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    
    plt.xlim((-1,2))
    plt.ylim((-2,3))
    
    
    plt.show()

    ————————————————————————————————————————

    接着看看对坐标轴刻度说明进行修改

    %matplotlib qt5
    x = np.linspace(-3,3,50)
    y1 = 2*x+1
    y2 = x**2
    
    plt.figure()
    plt.plot(x,y2)
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    
    plt.xlim((-1,2))
    plt.ylim((-2,3))
    plt.xlabel('I am x')
    plt.ylabel('I am y')
    
    new_ticks= np.linspace(-1,2,4)
    print(new_ticks)
    plt.xticks(new_ticks)
    plt.yticks([-2,-1.8,-1,1.22,3,],
               [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$'])
    plt.show()

    xticks和yticks有两个返回值,一个是刻度,一个刻度标签

     

    ————————————————————————————————————————————————————————

     对坐标轴位置、刻度位置进行修改

    %matplotlib qt5
    x = np.linspace(-3,3,50)
    y1 = 2*x+1
    y2 = x**2
    
    plt.figure()
    plt.plot(x,y2)
    plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
    
    plt.xlim((-1,2))
    plt.ylim((-2,3))
    plt.xlabel('I am x')
    plt.ylabel('I am y')
    
    new_ticks= np.linspace(-1,2,5)
    print(new_ticks)
    plt.xticks(new_ticks)
    plt.yticks([-2,-1.8,-1,1.22,3,],
               [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$'])
    
    ax = plt.gca()
    #隐藏顶部和右边两条轴
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    #设置坐标轴上的数字显示的位置,top:显示在顶部 bottom:显示在底部,默认是none ax.xaxis.set_ticks_position(
    'bottom') ax.yaxis.set_ticks_position('left') #把底部的轴移动到竖轴的0位置;把竖直的轴移动到横轴的0位置 ax.spines['bottom'].set_position(('data',0)) ax.spines['left'].set_position(('data',0)) plt.show()

    解释 ax = plt.gca()

    在matplotlib的图中,默认有四个轴,两个横轴和两个竖轴,可以通过ax = plt.gca()方法获取,gca是‘get current axes’的缩写,获取图像的轴,总共有四个轴top、bottom、left和right。

     三、

    图例

    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))
    plt.ylim((-2,3))
    plt.xlabel('I am x')
    plt.ylabel('I am y')
    
    new_ticks= np.linspace(-1,2,5)
    print(new_ticks)
    plt.xticks(new_ticks)
    plt.yticks([-2,-1.8,-1,1.22,3,],
               [r'$really bad$',r'$bad alpha$',r'$normal$',r'$good$' ,r'$really good$'])
    
    l1, = plt.plot(x,y1,label='up')
    l2, = plt.plot(x,y2,color='red',linewidth=1.0,linestyle='--',label='down')
    plt.legend(handles=[l1,l2],labels=['aaa','bbb'],loc='best')
    plt.show()

    loc参数是图例的位置,还有很多,例如upper right,upper down等,

    但是这里有一个很奇怪的地方,假如l1 = plt.plot(x,y1,label='up'),也就是去掉,后,图例就显示不成功了,但是如果lengend参数较简单,例如只有一个loc,那也会成功。

    四、注释

    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')
    #把底部的轴移动到竖轴的0位置;把竖直的轴移动到横轴的0位置
    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') plt.plot([x0,x0],[y0,0],'k--',lw=2.5) #method 1 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')) #method 2 ############### plt.text(-3.7,3,r'$This is the same text. mu sigma_i alpha_t$', fontdict={'size':16,'color':'r'}) plt.show()

    method1里面,xytext表示注释离点的坐标

    人生苦短,何不用python
  • 相关阅读:
    我想逗你开心!
    java 操作mysql数据库
    ajaxTest.js
    [译] 如何在React中写出更优秀的代码
    Solaris系统磁盘镜像配置步骤
    初探c++11之for循环篇
    初探c++11之介绍篇
    003:STM32系列命名规则(转)
    006:__Main介绍(ADS下)(转)
    005:DIY 解析STM32启动过程(转)
  • 原文地址:https://www.cnblogs.com/yqpy/p/11106405.html
Copyright © 2011-2022 走看看