python画图实例

7 篇文章 5 订阅
#-*-coding:utf-8 -*-需要用rtklib转换成NEU然后使用此脚本画图
import matplotlib.pyplot as plt
from pylab import *
from mpl_toolkits.axisartist.axislines import SubplotZero
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='C:/Windows/Fonts/simsun.ttc')

plt.rcParams['font.sans-serif']=['simsun']
plt.rcParams['axes.unicode_minus']=False

import numpy as np
def readFile(filename):
    f = open(filename,'r',encoding='utf-8') #如果文件不是uft-8编码方式,读取文件可能报错
    dataLines = f.readlines() #返回list,文件的每一行作为list的一个字符串元素
    # dataLines = dataLines[200:-250]  #读取行数的起始位置
    return dataLines


def getE(data = []):
    E = []
    for i in data:
        E.append(float(i[0:9]))
    return E
def getN(data = []):
    N = []
    for i in data:
        print(i)
        N.append(float(i[10:19]))
    return N
def getU(data = []):
    U = []
    for i in data:
        U.append(float(i[20:29]))
    return U

def getData(data = []):
    E=[]
    N=[]
    U=[]
    for i in data:
        E.append(float(i.split()[0]))
        N.append(float(i.split()[1]))
        U.append(float(i.split()[2]))
    print(E)
    return [E,N,U]



def plot_2D(dataE = [],dataN = [],dataU = []):


    e1 = dataE
    n1 = dataN

    std_e = np.std(e1)
    std_n = np.std(n1)

    var_e = 3.5  # 标准差
    var_n = np.var(n1) ** 0.5  # 标准差

    scale_y = max(var_e,var_n) # 刻度 四倍中误差

    if scale_y > 200:  # 最大不超过2m
        scale_y = 200

    epoch = len(e1)

    lim1 = [10] * epoch
    lim2 = [-10] * epoch

    x = np.linspace(0, epoch, epoch)  # 0到24 分240份

    fig = plt.figure(1)
    ax = SubplotZero(fig, 2, 1, 1)
    fig.add_subplot(ax)

    fig.set_size_inches(8, 4)
    fig.subplots_adjust(left=0.13, bottom=0.2)  # 一些设置

    # print(x)
    # print(e1)

    plt.plot(x, e1, "r.", label="E "+u"方向")
    plt.plot(x, n1, "b.", label="N "+u"方向")

    plt.plot(lim1, "m--")
    plt.plot(lim2, "m--")


    font2 = {'family': 'Times New Roman',
             'weight': 'normal',
             'size': 15,
             }

    plt.ylabel("残差/m", font2,fontproperties=myfont)
    plt.xlabel("历元/s", font2,fontproperties=myfont)
    # plt.title(format("平面残差"), font2,fontproperties=myfont)
    plt.ylim(-scale_y, scale_y)
    plt.legend()
    plt.grid("on")
    # plt.savefig("error of 2D" +"("")"+ "{0}{1}.png".format(" ", name), dpi=300)
# ---------------------------------------U方向---------------------------------------------------------------------------
    u1 = dataU

    std_u = np.std(u1)

    var_u = 5 # 标准差
    var_n = np.var(u1) ** 0.5  # 标准差

    scale_y = max(var_u, var_n)  # 刻度 四倍中误差

    if scale_y > 200:  # 最大不超过2m
        scale_y = 200

    epoch = len(u1)
    #   print("历元数为=", epoch)

    lim1 = [10] * epoch
    lim2 = [-10] * epoch

    x = np.linspace(0, epoch, epoch)  # 0到24 分240份

    ax = SubplotZero(fig, 2, 1, 2)
    fig.add_subplot(ax)

    fig.set_size_inches(8, 4)
    fig.subplots_adjust(left=0.13, bottom=0.2)  # 一些设置
    #
    # print(x)
    # print(u1)

    plt.plot(x, u1, "g.", label="U " + u"方向")

    plt.plot(lim1, "m--")
    plt.plot(lim2, "m--")


    plt.ylabel("残差/m", font2, fontproperties=myfont)
    plt.xlabel("历元/s", font2, fontproperties=myfont)
    # plt.title(format("U方向残差"), font2,fontproperties=myfont)
    plt.ylim(-scale_y, scale_y)
    plt.legend()
    plt.grid("on")
    plt.show()


def getM(data = []):
    dataSum = 0
    for i in data:
        dataSum =float(i) * float(i)+dataSum
    dataM2 = dataSum/(len(data)-1)
    dataM = sqrt(dataM2)
    return dataM

filename = 'E:\\湖南测试\\11.11\\第三次测试\\MI8差分 (1).txt'
data = readFile(filename)

ENU = getData(data)

E=ENU[0]
N=ENU[1]
U=ENU[2]
print("1111111111111111111111111111111111111111")
print(E)
print(N)
print(U)
print("1111111111111111111111111111111111111111")
# Me = getM(E)
# Mn = getM(N)
# Mu = getM(U)
# print(Me,Mn,Mu,sqrt(Me*Me+Mn*Mn),sqrt(Me*Me+Mn*Mn+Mu*Mu))
'''
Me = Me[0:8]
Mn = Mn[0:8]
Mu = Mu[0:8]
'''
# draw(E,N,U,Me,Mn,Mu)
plot_2D(E,N,U)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值