zoukankan      html  css  js  c++  java
  • matplotlib画图

    matplotlib画图

    基础

    最简单的图

    例子:

    import numpy as np #导入numpy包
    import matplotlib.pyplot as plt #导入matplotlib包
    
    x = [0, 1] #x轴
    y = [0, 1] #y轴
    plt.figure() #创建绘图对象
    plt.plot(x, y) #画图
    plt.show() #显示图像
    plt.savefig("easyplot.png") #保存图片
    

    1552288685863

    给图加上标签与标题

    import numpy as np #导入numpy包
    import matplotlib.pyplot as plt #导入matplotlib包
    
    x = [0, 1] #x轴
    y = [0, 1] #y轴
    plt.figure() #创建绘图对象
    plt.xlabel("time(s)") #x轴标签
    plt.ylabel("value(m)") #y轴标签
    plt.title("A simple plot") #标题
    plt.plot(x, y) #画图
    plt.show() #显示图像
    plt.savefig("easyplot.png") #保存图片
    

    1552288657353

    sinx曲线

    import numpy as np
    import matplotlib.pyplot as plt
    
    #设置x,y轴的数值(y=sinx)
    x=np.linspace(0,10,1000)
    y=np.sin(x)
    
    #创建绘图对象,figsize参数可以指定绘图对象的宽度和高度,单位为英寸,一英寸=80px
    plt.figure(figsize=(8,4))
    #在当前绘图对象中画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度)
    plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
    
    plt.xlabel("Time(s)") #X轴的文字
    plt.ylabel("Volt") #Y轴的文字
    plt.title("PyPlotFirstExample") #图表的标题
    plt.ylim(-1.2,1.2) #Y轴的范围
    plt.legend() #显示图示
    plt.show() #显示图
    plt.savefig("sinx.png") #保存图
    

    1552288935729

    折线图

    import numpy as np
    import matplotlib.pyplot as plt
    
    # X轴,Y轴数据
    x = [0, 1, 2, 3, 4, 5, 6]
    y = [0.3, 0.4, 2, 5, 3, 4.5, 4]
    plt.figure(figsize=(8, 4))  #创建绘图对象
    plt.plot(x, y, "b--", linewidth=1)  #在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
    plt.xlabel("Time(s)")  #X轴标签
    plt.ylabel("Volt")  #Y轴标签
    plt.title("Line plot")  #图标题
    plt.show()  #显示图
    plt.savefig("line.png") #保存图
    

    1552288636104

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 绘制普通图像
    x = np.linspace(-1, 1, 50)
    y1 = 2 * x + 1
    y2 = x**2
    
    plt.figure()
    # 在绘制时设置lable, 逗号是必须的
    l1, = plt.plot(x, y1, label = 'line')
    l2, = plt.plot(x, y2, label = 'parabola', color = 'red', linewidth = 1.0, linestyle = '--')
    
    # 设置坐标轴的取值范围
    plt.xlim((-1, 1))
    plt.ylim((0, 2))
    
    # 设置坐标轴的lable
    plt.xlabel('X axis')
    plt.ylabel('Y axis')
    
    # 设置x坐标轴刻度, 原来为0.25, 修改后为0.5
    plt.xticks(np.linspace(-1, 1, 5))
    # 设置y坐标轴刻度及标签, $$是设置字体
    plt.yticks([0, 0.5], ['$minimum$', 'normal'])
    
    # 设置legend
    plt.legend(handles = [l1, l2,], labels = ['a', 'b'], loc = 'best')
    plt.show()
    

    1552292227222

    创建多个图像

    import numpy as np
    import matplotlib.pyplot as plt
    
    # figure的使用
    x = np.linspace(-1, 1, 50)
    y1 = 2 * x + 1
    
    # figure 1
    plt.figure()
    plt.plot(x, y1)
    
    
    # figure 2
    y2 = x**2
    plt.figure()
    plt.plot(x, y2)
    
    
    # figure 3,指定figure的编号并指定figure的大小, 指定线的颜色, 宽度和类型
    y2 = x**2
    plt.figure(num = 5, figsize = (4, 4))
    plt.plot(x, y1)
    plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--')
    plt.show()
    

    1552292623335

    1552292630446

    1552292638667

    设置坐标轴

    import matplotlib.pyplot as plt
    import numpy as np
    
    # 绘制普通图像
    x = np.linspace(-3, 3, 50)
    y = 2 * x + 1
    
    plt.figure()
    plt.plot(x, y)
    
    # 将上、右边框去掉
    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    
    # 设置x轴的位置及数据在坐标轴上的位置
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    # 设置y轴的位置及数据在坐标轴上的位置
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    
    # 设置坐标轴label的大小,背景色等信息
    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(12)
        label.set_bbox(dict(facecolor = 'green', edgecolor = 'None', alpha = 0.7))
    
    plt.show()
    

    1552292775857

    在图表中显示中文

    matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,可以有几种解决方案。

    1. 在程序中直接指定字体。
    2. 在程序开头修改配置字典rcParams。
    3. 修改配置文件。

    上面那个link里的修改matplotlibrc方式,我试了好几次都没成功。能work的一个比较简便粗暴的方式(但不知道有没有副作用)是,1.找到字体目录YOURPYTHONHOMELibsite-packagesmatplotlibmpl-datafonts tf下的Vera.ttf。这里我们用中文楷体(可以从windows/system32/fonts拷贝过来,对于win8字体文件不是ttf的可以从网上下一个微软雅黑),直接张贴到前面的ttf目录下,然后更名为Vera.ttf。2. 中文字符串用unicode格式,例如:u''测试中文显示'',代码文件编码使用utf-8 加上" # coding = utf-8 "一行。

    函数

    常用函数

    函数 功能
    plt.plot 画图
    plt.xlabel x轴标签
    plt.ylabel y轴标签
    plt.title 标题
    plt.show 显示图像
    plt.savefig 保存图像
    plt.figure 创建一个图像窗口
    plt.xlim x轴的范围
    plt.ylim y轴的范围
    np.linspace 定义刻度

    plot

    用途:

    用来画图的,plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

    用法:

    plot(x, y, 'bo-') #蓝色圆点实线
    plot(x,y2,color='green', marker='o', linestyle='dashed', linewidth=1, markersize=6)
    plot(x,y3,color='#900302',marker='+',linestyle='-')
    plot(x, y) #plot x, y使用默认的线条样式和颜色
    plot(x, y, 'bo') #plot x,y用蓝色圆圈标记
    plot(y) #plot y用x作为自变量
    plot(y, 'r+') #同上,但是是用红色作为标记
    a.plot(x1, y1, 'g^', x2, y2, 'g-')
    

    参数:

    class matplotlib.lines.Line2D(xdata, ydata, linewidth, linestyle, color, marker, markersize)
    matplotlib.pyplot.plot(*args, **kwargs)
    plot([x], y, [fmt], data=None, **kwargs) #单条线:
    plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs) #多条线一起画
    

    可选参数[fmt] 是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle),

    具体形式 fmt = '[color][marker][line]'

    fmt接收的是每个属性的单个字母缩写,例如:

    plot(x, y, 'bo-')  #蓝色圆点实线
    

    若属性用的是全名则不能用fmt参数来组合赋值,应该用关键字参数对单个属性赋值如:

    plot(x,y2,color='green', marker='o', linestyle='dashed', linewidth=1, markersize=6)
    plot(x,y3,color='#900302',marker='+',linestyle='-')
    

    参数详解:

    color
    character color 颜色
    b blue
    g green 绿
    r red
    c cyan
    m magenta 品红
    y yellow
    k black
    w white
    linestyle
    character 线性
    - 实线
    - - 虚线
    -. 点画线
    点虚线
    .
    , 像素
    o 圆形
    v 朝下的三角形
    ^ 朝上的三角形
    < 朝左的三角形
    > 朝右的三角形
    | 垂直线形
    _ 水平线形
    marker
    character 描述
    s 正方形
    p 五角星
    * 星型
    h 1号六角形
    H 2号六角形
    + +号标记
    x x号标记
    D 钻石形
    d 小版钻石形
    1 tri_down marker
    2 tri_up marker
    3 tri_left marker
    4 tri_right marker

    legend

    用途:

    用法:

    参数:

    subplot

    用途:

    将多个图片合并显示

    用法:

    subplot将整个绘图区域等分为 numRows行* numCols列 个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

    subplot()返回它所创建的Axes对象,我们可以将它用变量保存起来,然后用sca()交替让它们成为当前Axes对象,并调用plot()在其中绘图。

    参数:

    subplot(numRows, numCols, plotNum)
    

    例子

    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.figure(1)  # 创建图表1
    plt.figure(2)  # 创建图表2
    ax1 = plt.subplot(211)  # 在图表2中创建子图1
    ax2 = plt.subplot(212)  # 在图表2中创建子图2
    x = np.linspace(0, 3, 100)
    
    for i in range(5):
        plt.figure(1)# 选择图表1
        plt.plot(x, np.exp(i * x / 3))
        plt.sca(ax1) #选择图表2的子图1
        plt.plot(x, np.sin(i * x))
        plt.sca(ax2)  #选择图表2的子图2
        plt.plot(x, np.cos(i * x))
    plt.show()
    

    1552293096560

    1552293108152

    参考文献

    https://blog.csdn.net/quincuntial/article/details/70947363

    https://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html

  • 相关阅读:
    2015 省赛随便写写
    有向图强连通分量
    复杂状态的动态规划
    hdu 3350
    树状DP
    十字链表矩阵
    最优矩阵链乘
    poj 3778
    Poj 3771 hdu 3405
    [2015hdu多校联赛补题]hdu5302 Connect the Graph
  • 原文地址:https://www.cnblogs.com/niubidexiebiao/p/10511600.html
Copyright © 2011-2022 走看看