添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

还在用OriginLab绘图?你已经Out啦。现在可以用Python会出超级好看的数据图,开源免费还不输Origin。

基础环境

使用python绘制数据图需要几个python包:

  • matplotlib,用来绘图
  • numpy,用来进行矩阵运算
  • xlrd,用来从excel读取数据
  • 这几个包都是支持python2和python3的,不过新版的matplotlib貌似已经不再支持python2了,所以推荐全部使用python3环境。安装这几个包很简单,使用pip3就行:

    1
    2
    3
    sudo pip3 install matplotlib
    sudo pip3 install numpy
    sudo pip3 install xlrd

    推荐使用spyder集成开发环境来工作,这可比简单的笔记本写python好多了。 Spyder的安装见另一个文章。

    从Excel读取数据

    看代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import numpy as np
    import matplotlib.pyplot as plt
    import xlrd

    data=xlrd.open_workbook("data.xlsx")#将data.xlsx读入data变量
    sheet0=data.sheets()[0]#将data中的第一个sheet读入sheet0

    x=sheet0.col_values(0)#将sheet0中第一列读入x
    y1=sheet0.col_values(1)
    y2=sheet0.col_values(2)

    绘图

    绘图主要使用matplotlib的功能,由于我们已经将matplotlib作为plt导入,所以:

    1
    2
    line1,=plt.plot(x,y1,linestyle="--",color="red",marker="o")
    line2,=plt.plot(x,y2,linestyle="--",color="blue",marker="v")

    注意这里line1和line2分别是对应两条曲线的变量名,注意逗号。plot中的前两个变量是x和y。

    linestyle指的是线型,常用的线性有四种:

    设置格式

    1
    2
    3
    4
    5
    6
    7
    8
    plt.xlim(0,20)
    plt.ylim(0,5)
    plt.xlabel('x value')
    plt.ylabel('y value')

    plt.rcParams['xtick.direction']='in'
    plt.rcParams['ytick.direction']='in'
    plt.rcParams['figure.dpi'] = 300
  • xlim和ylim设置x和y的绘图范围
  • xlabel和ylabel是x和y轴的名字
  • plt.rcParams[‘xtick.direction’]用来设置坐标轴上刻度线的方向,in指的是刻度线在坐标轴内部,还可以设置为out。
  • figure.dpi用来设置图像dpi,默认比较低,这里建议用300。
  • 图例

    1
    plt.legend([line1,line2],['First','Second'],loc = 'upper left')

    内容大家对照之前的代码和下面的图就能猜到了,值得一说的是loc,可以用upper,down,center,right和left来控制位置,或者直接用best让python自己选择最佳位置。

    放一个刚刚画好的图:

    这张图对应的代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    Created on Sun Dec 2 20:01:32 2018

    @author: spacexi
    """

    import numpy as np
    import matplotlib.pyplot as plt
    import xlrd

    data=xlrd.open_workbook("data.xlsx")
    sheet0=data.sheets()[0]

    x=sheet0.col_values(0)
    y1=sheet0.col_values(1)
    y2=sheet0.col_values(2)


    plt.xlim(0,20)
    plt.ylim(0,5)
    plt.xlabel('x value')
    plt.ylabel('y value')

    plt.rcParams['xtick.direction']='in'
    plt.rcParams['ytick.direction']='in'
    plt.rcParams['figure.dpi'] = 300

    line1,=plt.plot(x,y1,linestyle="--",color="red",marker="o")
    line2,=plt.plot(x,y2,linestyle="--",color="blue",marker="v")

    plt.legend([line1,line2],['First','Second'],loc = 'upper left')