VT 值分布图:按目录和时间节点分析

本脚本通过 Python 代码读取不同目录(时间节点)下的 VT 值数据,并绘制其分布图。同时,脚本对每个目录的最小 VT 值进行分析,并将其绘制在图上。此脚本适用于分析 VT 值随时间变化的趋势,以及识别不同时间节点的 VT 值差异。

import numpy as np
import matplotlib.pyplot as plt
import os
import math
import time

### step1: 按照每一片画出不同目录(时间节点)的vt 值的分布
path='.\readvt\log\'
#path='.\vt-32Mb-skyworth\'

path1='.\readvt\results\'

dir=[]
abnorm=[]
vrd=6.0
files=os.listdir(path)
for i in files:
    if os.path.isdir(path+i):
        dir.append(i)
print(dir)
slotn=['1']
files=['1.log','2.log','3.log']
## step2: 按照目录获取最小值并plt
plt.figure(figsize=(16,8),dpi=80)
for k in dir:
    files=os.listdir(path+k)
    # print(files,k)
    vt0_min=[]  ### list store of min vt value of each dir
    slot_name=[]
    vt_value_flt_wo0=[]
    for p in slotn:
        a='zero pattern vth worsest case:'
        for i in files:
            with open(path+k+'\'+i,'r',encoding='gb18030',errors='ignore') as file:
                data=file.readlines()
                for n in data:
                    if a in n:
                        #print(n)
                        vt_value_str=data[data.index(n)][31:-2]
                        #print(vt_value_str)
                        vt_value_flt_wo0.append(vt_value_str)
                        print(vt_value_flt_wo0,len(vt_value_flt_wo0))
                vt0_min=[float(i) for i in vt_value_flt_wo0]
            #slot_name.append(k+'\'+ str(i))
    #min_slot=slot_name[vt0_min.index(min(vt0_min))]
    print(vt0_min)
    x=np.sort(vt0_min)
    y=np.arange(1,len(x)+1)/len(x)
    plt.yticks(np.logspace(-2,0,21)) # set yaxis label precision to log scale

    plt.plot(x,y,marker='.',linestyle=':',label='%s %d pcs min vt=%f'%(k,len(vt0_min),min(vt0_min)))
    plt.annotate(min(vt0_min),(min(vt0_min),1/len(vt0_min)))
#    plt.annotate('Vrd=%s'%vrd,(vrd+0.05,0.5))
    #plt.annotate(vt0_min[int(len(vt0_min)/2)],(vt0_min[int(len(vt0_min)/2)],0.5))#1/int(len(vt0_min)/2)))
    #plt.subplots_adjust(left=0.18, wspace=0.25, hspace=0.25,bottom=0.13, top=0.91)
#    plt.axvline(x=vrd,ls='-',c='red')
    plt.margins(x=0.5, y=0.05)
    plt.xlabel('vt value last not 0 count')
    plt.ylabel('cumulative probability')
    plt.legend(loc='lower right',fontsize='small')#'best'
    plt.tight_layout()
    plt.grid(b=bool)
    plt.title('vt distribution')
    #plt.show()
t = time.strftime('%Y%m%d-%H%M',time.localtime(time.time()))
plt.tight_layout()
plt.savefig(path1+'min_vt_value_distribution.png')
    #plt.savefig(path2+'vtdistr.png')
plt.close()

修改说明:

plt.yticks 中的参数改为 np.logspace(-2,0,21) 即可将 y 轴的概率分布排列方式改为 log10 的范围。

代码解释:

  • np.logspace(-2,0,21):生成一个等比数列,包含 21 个元素,第一个元素为 10^-2,最后一个元素为 10^0,中间元素以对数间隔分布。这将使 y 轴的刻度以 log10 的方式分布。

其他优化建议:

  • 优化代码注释:使用更清晰、简洁的注释描述代码的功能和逻辑。
  • 代码规范化:使用一致的代码风格,例如缩进、变量命名等。
  • 优化数据处理:使用更简洁高效的数据处理方式,例如使用 pandas 库。
  • 可视化优化:使用更直观的图表类型和颜色搭配,使数据可视化更易于理解。

最终结果:

通过修改后的脚本,可以生成 y 轴采用 log10 范围的 VT 值分布图。这有助于更直观地观察 VT 值在不同时间节点上的分布情况,以及识别异常数据。

VT 值分布图:按目录和时间节点分析

原文地址: https://www.cveoy.top/t/topic/oDHy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录