zoukankan      html  css  js  c++  java
  • matplotlib-2D绘图库-面向对象

     个人理解:plt--画本    figure--产生画纸

    子图

    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    plt.title("图标题",fontsize=24)  #图的标题
    plt.xlabel("x轴标题")
    plt.ylabel("y轴标题")
    
    x=np.arange(0,10,1)
    fig=plt.figure()  #定义一个图纸

    #figsize=(4,4) 设置窗口大小 参数是个元组,单位:英寸
    #facecol)or='#FF0000':可选参数,表示窗口的背景颜色,如果没有提供则默认为figure.facecolor
    #edgecolor:可选参数,表示窗口的边框颜色,如果没有提供则默认为figure,edgecolor ??
    #frameon:可选参数,表示是否绘制窗口的图框,默认是 ???
    #clear=True:可选参数 清除画纸的内容 ??
    #dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张


    ax1 = fig.add_subplot(2,2,1) #添加子图 #将画布分割成2行2列,图像画在第1块
    ax1.plot(x,x) #在指定子图上画图 ax2 = fig.add_subplot(2,2,2) #添加子图 ax2.plot(x,-x) plt.show()

    效果

    画多个图:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    x=np.arange(0,10,1)
    fig=plt.figure()  #定义第一个图纸
    ax1 = fig.add_subplot(1,1,1)
    ax1.plot(x,x)
    
    fig2=plt.figure()  #定义第二个图纸
    ax2 = fig2.add_subplot(1,1,1)
    ax2.plot(x,-x)
    
    plt.show()

    画网格:

    方法一:plt法

    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    x=np.linspace(-10,10,10)
    y=x**2
    plt.plot(x,y,linestyle=':',color='red',marker='o')   #画直线
    plt.grid(b=True,color='r',linewidth='2',linestyle=':',axis='both')  #画出网格
    #参数b 是否画出网格;默认False,不画网格
    #color 网格线颜色
    #linewidth 网格线粗细
    #linestyle 网格线的样式:虚线
    #axis 设置哪个方向画出网格线,选项有:x、y、both(xy都画)
    
    plt.show()

    对象法:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    x=np.linspace(-10,10,10)
    y=x**2
    
    fig=plt.figure()  #定义一个画纸
    ax=fig.add_subplot(1,1,1)
    ax.plot(x,y,linestyle=':',color='red',marker='o')
    
    ax.grid(b=True,color='r',linewidth='2',linestyle=':',axis='both')  #画出网格
    #参数b 是否画出网格;默认False,不画网格
    #color 网格线颜色
    #linewidth 网格线粗细
    #linestyle 网格线的样式:虚线
    #axis 设置哪个方向画出网格线,选项有:x、y、both(xy都画)
    
    plt.show()

    图例:

    import numpy as np
    import matplotlib.pyplot as plt
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    x=np.linspace(0,10,10)
    y=x**2
    
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    ax.plot(x,y,linestyle=':',marker='o',color='r',label='1图')
    ax.plot(x,x,color='b',label='2图')
    ax.plot(x,-x,color='y',label='3图')
    ax.legend(loc=0,ncol=3)  #画出图例
    # loc: 表示位置,包括'upper right','upper left','lower right','lower left'等
    # bbox_to_anchor: 表示legend距离图形之间的距离,当出现图形与legend重叠时,可使用bbox_to_anchor进行调整legend的位置
    # 由两个参数决定,第一个参数为legend距离左边的距离,第二个参数为距离下面的距离
    #'upper right'=1;'upper left'=2;'lower left'=3;'lower right'=4; 0 自适应找位置
    #ncol 图例的列数
    plt.show()

    坐标轴:

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import datetime

    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    x=np.linspace(1,10,10)
    y=x**2

    fig=plt.figure()
    ax=fig.add_subplot(2,1,1)
    ax.plot(x,y,linestyle=':',marker='o',color='r')
    bx=plt.gca() #获取当前坐标轴
    bx.locator_params(nbins=10) #设置x和y坐标轴分成n个格
    #bx.locator_params('x',nbins=10) #设置x坐标轴分成n个格
    # bx.locator_params('y',nbins=10) #设置y坐标轴分成n个格
    bx.axis([0,5,0,20]) #设置x轴和y轴的坐标范围
    #参数1 参数2 x轴坐标范围
    #参数3 参数4 y轴坐标范围

    ax.set_xlim(1,10) #设置x坐标轴范围
    ax.set_ylim(1,50) #设置y坐标轴范围

    #设置坐标显示范围和刻度【不知如何交互】
    my_x_ticks = np.arange(0, 11, 1)
    #参数1 参数2 显示的坐标范围 参数3 刻度间距
    #顾头不顾尾
    my_y_ticks = np.arange(0, 51, 4)
    dx=plt.xticks(my_x_ticks)
    dy=plt.yticks(my_y_ticks)

    ax1=fig.add_subplot(2,1,2)

    #处理日期数据
    start=datetime.datetime(2015,1,1)
    stop=datetime.datetime(2015,1,11)
    delta=datetime.timedelta(days=1) #时间间隔为1天
    #delta = datetime.timedelta(microseconds=500000) # 0.5秒为间隔
    dates=mpl.dates.drange(start,stop,delta) #以指定的间隔产生序列
    date_format=mpl.dates.DateFormatter('%m-%d') #格式
    ax1.xaxis.set_major_formatter(date_format) #设置x轴的数据格式

    ax1.plot_date(dates,x) #画包含日期数据的点或直线
    fig.autofmt_xdate() #画纸x轴数据自适应

    ax1.twinx() #添加一个y坐标轴
    ax1.twiny() #添加一个x坐标轴


    plt.show()

     画注释:

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import datetime
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    fig=plt.figure()  #定义第一个图纸
    x=np.arange(-10,11,1)
    y=x**2
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.annotate('这是底部',xy=(0,1),xytext=(0,20),arrowprops=dict(facecolor='y',shrink=0.08,frac=0.1,headwidth=10,width=5))  #画注释
    #箭头是从xytext的坐标画到xy的坐标
    #参数1 注释文字        #参数2 xy 箭头的坐标     #参数3 xytext 注释文字的起始坐标
    #facecolor='y'    设置颜色
    #shrink=0.08    <1   箭头收缩比,离文字的距离
    #frac=0.1   箭头头部所占据的比例   ?????
    #headwidth=10   箭头头部的宽度,以点为单位
    #width=5   箭身宽度
    
    
    plt.show()

    还有高级注释,请看 https://blog.csdn.net/wizardforcel/article/details/54782628 

    文字:

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import datetime
    
    #解决能显示中文
    plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    
    fig=plt.figure()  #定义第一个图纸
    x=np.arange(-10,11,1)
    y=x**2
    ax = fig.add_subplot(1,1,1)
    ax.plot(x,y)
    ax.text(5,20,'文字注释',family='SimHei',size=25,verticalalignment="top",horizontalalignment="right",color='r',style='italic')  #文字
    #参数1 参数2   坐标
    #参数3  文本
    #size:表示字体大小
    #verticalalignment:垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
    #horizontalalignment:水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]
    #字体
    #color  文字颜色
    
    ax.text(5,60,'文字注释',size=25,weight='bold',alpha = 0.9,style = "oblique",bbox = dict(facecolor = "b", alpha = 0.2))
    #style = "italic"     斜体 ???
    ## alpha 设置字体的透明度
    # bbox 给字体添加框,alpha 设置框体的透明度, facecolor 设置框体的颜色
    #weight=0.5 (0-1000)   粗细  ???
    
    plt.show()

     画数学公式:

     官网资料:https://matplotlib.org/users/mathtext.html  

    视频教程 

    $作为开始和结束

    符号的表示:

    小写希腊字母:

    大写希腊字母:

    Delimiters:

    大符号:

    标准函数名:

    等等

    ax.text(2,4,r'$alpha_i eta_j pi lambda omega $',size=25)   #画公式
    # 参数1 参数2 坐标
    # r 不转义
    # _ 下标

    效果:

     

    ax.text(4,4,r'$sin(0)=cos(frac{π}{2}) $',size=15)
    # frac{}{} 分号:第一个大括号里的内容是分子,第二个大括号里的内容是分母

    效果:

     

    ax.text(2,2,r'$lim_{x ightarrow y} frac{1}{x^3} $',size=15)
    # lim 极限符号

    效果:

     

    ax.text(4,2,r'$sqrt[4]{x} =sqrt[2]{y}$',size=15)
    # sqrt[3]{x} 开根号

    效果:

    ax.text(4,2,r'$sqrt[4]{x} =sqrt{y}$',size=15)

    开平方时 平方可以省略  

    
    
    
    
    
    
    
    
    
    

     

     

    天子骄龙  生命诚可贵  时光价更高

  • 相关阅读:
    LeetCode(274)H-Index
    LeetCode(279)Perfect Squares
    LeetCode(278)First Bad Version
    LeetCode(289)Game of Life
    LeetCode(292) Nim Game
    LeetCode(282) Peeking Iterator
    解决Secure Shell Client(SSH)客户端中文乱码的方法
    Mysql 或者当前时间戳
    java http请求url报错505,但是浏览器可以正常返回json数据
    查询直播流实时帧率和码率 签名
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10515632.html
Copyright © 2011-2022 走看看