zoukankan      html  css  js  c++  java
  • matplotlib基础

    如何安装:pip install matpltlib即可

    1.画一条直线

    1 x = np.arange(1,10,1)#不包含终点 #包含终点x = np.linspace(1,10,1)
    2 y = x + 1
    3 plt.title('first')
    4 plt.xlabel('this is x')
    5 plt.ylabel('this is y')
    6 plt.plot(x,y)
    7 plt.savefig("1.jpg")#保存图片
    8 plt.show()

     2.画两条线

    在第一个例子的基础上我们使用subplot(),让可以同时显示两个图

    from matplotlib import pyplot as plt
    import numpy as np
    import random
    x = np.arange(1,10,1)
    y = x + 1
    plt.subplot(121),plt.plot(x,y)
    plt.title('first')
    plt.subplot(122),plt.plot(-x,y)
    plt.title('second')
    plt.show()

     subplot(a,b,c)中a代表所画图形的行数 b代表所画图形的列数 c代表所画图形的序号,比如subplot(2,2,1),就是两行两列的第一个,排序是从左至右,从上至下

    当然我们也可以让这两个图分开显示,这里使用figure,创建两个不同的figure,这里dip越大越清晰,但是随着增大在不改变figsize的情况下图也会变大

    from matplotlib import pyplot as plt
    import numpy as np
    import random
    x = np.arange(1,10,0.1)
    y1 = np.sin(x)
    y2 = np.cos(x)
    plt.figure(num=1,figsize=(8,6),dpi=50,facecolor='white',edgecolor='k')
    plt.plot(x,y1)
    plt.figure(num=2,dpi=100,facecolor='r',edgecolor='k',figsize=(5,3))
    plt.plot(x,y2,'or')
    plt.show()

     matplotlib中有很多样式的简写,例如我写的‘or’代表 “点 红“

     

     

    具体还有很多样式,可以去网上查

     3.修改坐标轴

    -让坐标显示到(0,0)

    from matplotlib import pyplot as plt
    import numpy as np
    x = np.arange(-np.pi*2,np.pi*2,0.1)
    y = np.sin(x)
    plt.plot(x,y)
    ax = plt.gca()#获取当前轴Get Current Axes
    
    ax.spines['right'].set_color('none')#设置无色,即看不见
    ax.spines['top'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))#设置显示位置0
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    #plt.axis('off')#这个将不显示坐标轴 plt.show()

     -设置坐标轴显示范围

    在上面的例子基础上添上一句

    plt.xlim(-np.pi,np.pi)
    plt.ylim(-1,1)

    图像将变成这样,那么其他的就没了吗?

    其实点击拖动按钮,你可以发现图像依旧是完成的并未裁切

    还有一点是xlim()和ylim()是左右都是闭合的,print一下就可以看到

    h2> -重设置坐标ticks

    有时可能线会遮挡看坐标,比如下面我将线宽度设置为100时,很多坐标已经看不到了,这时可以重新设置坐标

    from matplotlib import pyplot as plt
    import numpy as np
    x = np.arange(-10,11)
    y = x+3
    new_ticks = np.linspace(-10,10,10)
    plt.xticks(new_ticks)
    plt.yticks([-7,5,14],
    ['bad','middle','good'])
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    plt.plot(x,y,linewidth = 100,zorder=1)

    plt.show()

     这样y轴就会显示我所设置的东西,x轴按设置的分成(10-1)份,10个点

    接下来来修改坐标值透明度,在show前添加代码

    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(12)
        label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7, zorder=2))

     4注解和标识

    --图例模块(legend)可以实现在图中进行线的标注,代码以及效果如下

    x = np.linspace(1,20)
    y1 = 10*x + 8
    y2 = x*x
    l1, = plt.plot(x,y1,label='one',linestyle='--')
    l2, = plt.plot(x,y2,label='two')#需要加,号
    plt.legend(handles =[l1,l2,] ,labels=['aa','bb'],loc=0)#loc=0代表‘best’location
    #plt.legend(loc=0)用这种的话默认名字就是plot中label的名字

    plt.show()

     loc = 的参数如下,一般用best就号,这样在移动或者缩放的情况下还会进行自动调整

    --做注释

    1.使用plt.text(),效果如下

    plt.text(-4,4,'this is a test',fontdict = {'size':16,'color':'red'})

     2.使用annotate()具体的参数有点多可以查看这篇官方文档

    https://matplotlib.org/api/_as_gen/matplotlib.pyplot.annotate.html?highlight=annotate#matplotlib.pyplot.annotate

    x = np.linspace(-3,3,50)
    y = 2*x+1
    ax = plt.gca()
    ax.spines['left'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data',0))
    ax.yaxis.set_ticks_position('right')
    ax.spines['right'].set_position(('data',0))
    x0 = 1#x0和y0为我需要注释的点
    y0 = 2*x0 +1
    plt.scatter(x0,y0)
    plt.plot([x0,x0],[y0,0],'k--')#做直线
    plt.plot([x0,0],[y0,y0],'r--')
    plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords = 'offset points',
                 arrowprops = dict(arrowstyle='->',connectionstyle='arc3,rad=0'))
    #第一个参数是text文本内容
    #plt.text(-4,4,'this is a test',fontdict = {'size':16,'color':'red'})#方法1 plt.plot(x,y) plt.show()

    效果如下

    指示箭头的样式

  • 相关阅读:
    查询缓存
    Indexes
    计院生活第三章 狂轰乱炸(上)
    JAVA实现文件树
    OGNL表达式语言介绍
    DOM4J使用教程
    css 优先级
    《JavaScript凌厉开发 Ext详解与实践》3月5日开始上架销售
    Drools 规则引擎
    OLTP和OLAP区别
  • 原文地址:https://www.cnblogs.com/Truedragon/p/12862519.html
Copyright © 2011-2022 走看看