python 绘制时间轴的条形图_数据

 

 

       这是接着上次 “如何diy一个uvm框架 ” 的实战延续,uvm生成完对比数据后,就要用python绘制出相应的条形图,方便直接观察。

带宽波动长度波动,其他答案麻烦在评论区回复,十分感谢!

      网上关于绘制条形图大多都是调用matplotlib库,然后巴拉巴拉一堆,确实结果不错,感觉还是很香的,下图是网上随便截取的一个,你们看看就好。

python 绘制时间轴的条形图_python 绘制时间轴的条形图_02

       

但是我会这样简单的抄作业吗?可以,但没必要。公司中很多都是不联网的环境,哪里给你用这个库,思考了一会,感觉条形图不会很难,那就手撸一个吧,话不多说,正式开始

       分析上图,就是两个for循环,然后按像素点打印一组组数据,由于条形图顶部肯定有空余,那就要设置max值,贴出部分代码段:

max_yaxix_width = 25
    x_buf= ""
    y_buf= ""
    idle_buf="      "    
    blank_buf="  "
    blank=blank_buf+idle_buf
    print("\n ★★★★★★★★★◣︻◢★★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★")
    print("       ★★★★★★★★★★★★★★★★★★★★★测 试 结 果★★★★★★★★★★★★★★★★★★★★★★")
    print("           ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n")
    
    #and and x==len(x_axis)-1 and int(y)==int(y_axis[len(y_axis)-1]) 
    for g in range(max_yaxix_width,-1,-1):	
        for x in range(0,len(x_axis)):
        	if int(math.ceil(int(y_axis[x])/multiple_reduction))>=g  :
        	    #print("  g="+str(g)+"  x="+str(x)+"  y="+y_axis[x] )
        	    y_buf = y_buf +idle_buf+"▇"
        	else :
        		y_buf = y_buf + blank
        		#print("  g="+str(g)+"  x="+str(x)+"  y="+y_axis[x] ) 

        	if x==len(x_axis)-1 :
        	    y_buf = y_buf + "\n"  

        						
    print(y_buf)

      到这里就完了吗?不不不,我的智商不允许我这么草率的结束,参数和数据肯定能从外部文本设置才能完美融入UVM中,所以又经过一点点小修改,读取外部文本数据,抠出字符,贴出对应代码段:

#对log分析:
def get_data(txt):
    global x_axis
    global y_axis
    x_axis =[]
    y_axis =[]
    with open(txt,'r',encoding='utf-8') as file:
        for line in file.readlines(): 
        	mid_buf=" ".join(line.split())
        	x_axis.append(mid_buf.split(' ')[0])
        	y_axis.append(mid_buf.split(' ')[1])
         
   
def get_config(txt):
    global max_name_width
    global multiple_reduction

    with open(txt,'r',encoding='utf-8') as file:
        for line in file.readlines(): 
        	mid_buf=" ".join(line.split())
        	if "max_name_width" in mid_buf:
        		max_name_width =int(mid_buf.split('=')[1])
        	if "multiple_reduction" in mid_buf:
        		multiple_reduction =int(mid_buf.split('=')[1])

         ok,看下结果吧,结果好才是真的好,结果如下图:

python 绘制时间轴的条形图_python_03

你以为这里就结束了吗?不不不,又竖着的条形图,那就有横着的条形图,于是我去厕所找灵感,花了几分钟,灵感爆棚,又for了一次,代码段如下:

print("\n ★★★★★★★★★◣︻◢★★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★")
    print("       ★★★★★★★★★★★★★★★★★★★★★测 试 结 果★★★★★★★★★★★★★★★★★★★★★★")
    print("           ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n")
    
    for i in range(0,len(x_axis)): 
        for j in range(0,math.ceil(int(y_axis[i])/multiple_reduction)):
        	if j==0:
        	    x_buf = "  "+str(x_axis[i])+":"
        	    idle=max_name_width-len(x_axis[i])
        	    idle =idle*2
        	    for x in range(0,idle):
        	    	x_buf = x_buf+" "   
        	x_buf = x_buf + "▇" 
        print(x_buf+ "  "+str(y_axis[i]))  
    print("\n")

         ok,再看下结果吧,结果好才是真的好,咦,好像之前说过了,结果如下图:

python 绘制时间轴的条形图_python_04

麻烦关注支持一下,更新不易,且珍惜!

完整代码/

代码结构:

python 绘制时间轴的条形图_经验分享_05

config.txt文件:

max_name_width = 6
multiple_reduction = 1

data.txt文件:

葡萄  20
手机  10
电脑架子   20
西红柿  10
梨  5
苹果  6
手机  10
电脑架子   20
西红柿  10
梨  5
苹果  6
手机  10
西红柿  10
梨  5
手机  10
电脑架子   20
西红柿  10
梨  5
苹果  6

main.py文件:

import sys
import os
import math

max_name_width = 5
multiple_reduction = 2
x_axis = ["西红柿", "梨","苹果","哈密瓜汁"]
y_axis = [40, 15, 20, 100]

#对log分析:
def get_data(txt):
    global x_axis
    global y_axis
    x_axis =[]
    y_axis =[]
    with open(txt,'r',encoding='utf-8') as file:
        for line in file.readlines(): 
        	mid_buf=" ".join(line.split())
        	x_axis.append(mid_buf.split(' ')[0])
        	y_axis.append(mid_buf.split(' ')[1])
         
   
def get_config(txt):
    global max_name_width
    global multiple_reduction

    with open(txt,'r',encoding='utf-8') as file:
        for line in file.readlines(): 
        	mid_buf=" ".join(line.split())
        	if "max_name_width" in mid_buf:
        		max_name_width =int(mid_buf.split('=')[1])
        	if "multiple_reduction" in mid_buf:
        		multiple_reduction =int(mid_buf.split('=')[1])


def y_gui(): 
    global max_name_width 
    global multiple_reduction 
    global x_axis 
    global y_axis 
    print("\n ★★★★★★★★★◣︻◢★★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★")
    print("       ★★★★★★★★★★★★★★★★★★★★★测 试 结 果★★★★★★★★★★★★★★★★★★★★★★")
    print("           ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n")
    
    for i in range(0,len(x_axis)): 
        for j in range(0,math.ceil(int(y_axis[i])/multiple_reduction)):
        	if j==0:
        	    x_buf = "  "+str(x_axis[i])+":"
        	    idle=max_name_width-len(x_axis[i])
        	    idle =idle*2
        	    for x in range(0,idle):
        	    	x_buf = x_buf+" "   
        	x_buf = x_buf + "▇" 
        print(x_buf+ "  "+str(y_axis[i]))  
    print("\n")       
  

def x_gui(): 
    global multiple_reduction 
    global x_axis 
    global y_axis 
    max_yaxix_width = 25
    x_buf= ""
    y_buf= ""
    idle_buf="      "    
    blank_buf="  "
    blank=blank_buf+idle_buf
    print("\n ★★★★★★★★★◣︻◢★★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★★★★★◣︻◢★★★★★★★★★★")
    print("       ★★★★★★★★★★★★★★★★★★★★★测 试 结 果★★★★★★★★★★★★★★★★★★★★★★")
    print("           ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n")
    
    #and and x==len(x_axis)-1 and int(y)==int(y_axis[len(y_axis)-1]) 
    for g in range(max_yaxix_width,-1,-1):	
        for x in range(0,len(x_axis)):
        	if int(math.ceil(int(y_axis[x])/multiple_reduction))>=g  :
        	    #print("  g="+str(g)+"  x="+str(x)+"  y="+y_axis[x] )
        	    y_buf = y_buf +idle_buf+"▇"
        	else :
        		y_buf = y_buf + blank
        		#print("  g="+str(g)+"  x="+str(x)+"  y="+y_axis[x] ) 

        	if x==len(x_axis)-1 :
        	    y_buf = y_buf + "\n"  

        						
    print(y_buf)
    x_buf = "     "
    for x in range(0,len(x_axis)):
    	x_buf = x_buf+x_axis[x]+"   "
    print(x_buf)  
      	    
  		


def main(): 
    get_config("config.txt")
    get_data("data.txt")
    x_gui()
    
if len(sys.argv) < 2 :
    main()

谢谢观看!!!!