Vt 值分布的 Log10 概率图
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)
# 修改此处,使用 log10 形式显示 y 轴
plt.yticks(np.logspace(-2,0,7))
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 (log10)')
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.ylabel('cumulative probability (log10)')来明确说明 Y 轴的 log10 形式。 - 将
plt.yticks()函数修改为plt.yticks(np.logspace(-2,0,7)),使用np.logspace函数生成 log10 形式的刻度。
解释:
np.logspace(-2, 0, 7) 生成 10 的 -2 次方到 10 的 0 次方之间均匀分布的 7 个数,即 [0.01, 0.025, 0.063, 0.158, 0.398, 1.0],这些值将作为 Y 轴的标签,从而使 Y 轴显示为 log10 形式。
其他优化:
- 可以使用
plt.yscale('log')函数来直接将 Y 轴设置为 log10 形式,但这会将所有 Y 轴值都转换为 log10 形式,而我们只希望标签显示为 log10 形式。 - 可以根据实际需要调整
np.logspace函数中的参数-2,0和7来改变 log10 刻度的范围和数量。
注意:
- 确保你已经安装了
numpy和matplotlib库。 - 调整代码中的文件路径和文件名以匹配你的实际情况。
原文地址: https://www.cveoy.top/t/topic/oDHI 著作权归作者所有。请勿转载和采集!