分析工具支持修改上下限时重绘图像
This commit is contained in:
@@ -21,57 +21,101 @@ import build_html
|
|||||||
|
|
||||||
plt.rcParams['font.sans-serif']=['SimHei']
|
plt.rcParams['font.sans-serif']=['SimHei']
|
||||||
plt.rcParams['axes.unicode_minus']=False
|
plt.rcParams['axes.unicode_minus']=False
|
||||||
|
plt.rcParams['figure.max_open_warning'] = False
|
||||||
|
|
||||||
|
|
||||||
# 定义一个可以嵌入到qt的figure
|
# 定义一个可以嵌入到qt的figure
|
||||||
class QFigure(QObject):
|
class QFigure(QObject):
|
||||||
def __init__(self,title:str) -> None:
|
def __init__(self,title:str) -> None:
|
||||||
QObject.__init__(self)
|
QObject.__init__(self)
|
||||||
self.__figure = plt.figure(figsize=(14,7))
|
self._figure = plt.figure(figsize=(14,7))
|
||||||
self.__canvas = FigureCanvas(self.__figure)
|
self._canvas = FigureCanvas(self._figure)
|
||||||
self.__ax = self.__figure.add_axes([0.1,0.1,0.8,0.8])
|
self._ax = self._figure.add_axes([0.1,0.1,0.8,0.8])
|
||||||
self.__ax.set_title(title)
|
self._ax.set_title(title)
|
||||||
self._title=title
|
self._title=title
|
||||||
|
self._line_min=None
|
||||||
|
self._line_max=None
|
||||||
|
self._max=0
|
||||||
|
self._min=0
|
||||||
|
|
||||||
def draw(self,x,y,lable:str=None,limit_max:int=None,limit_min:int=None):
|
def set_lines(self,x,y,lable:str=None,limit_max:int=None,limit_min:int=None):
|
||||||
line,=self.__ax.plot(x,y,)
|
line,=self._ax.plot(x,y,)
|
||||||
if(lable!=None):
|
if(lable!=None):
|
||||||
line.set_label(lable)
|
line.set_label(lable)
|
||||||
self.__ax.legend()
|
self._ax.legend()
|
||||||
if(limit_max!=None):
|
self.set_max(limit_max)
|
||||||
self.__ax.axhline(y=limit_max,color='g',linestyle='--')
|
self.set_min(limit_min)
|
||||||
if(limit_min!=None):
|
self._ax.grid(visible=True,which="major",axis="y")
|
||||||
self.__ax.axhline(y=limit_min,color='r',linestyle='--')
|
def draw(self):
|
||||||
# start, end = self.__ax.get_ylim()
|
# start, end = self._ax.get_ylim()
|
||||||
# self.__ax.yaxis.set_ticks(np.arange(start, end,(end-start)/20),minor=True)
|
start=self._min
|
||||||
# ticks=self.__ax.yaxis.get_ticklocs()
|
end=self._max
|
||||||
# self.__ax.yaxis.set_ticks(minor=True)
|
step=(end-start)//20
|
||||||
# self.__ax.yaxis.set_ticks(ticks)
|
bond=(end-start)//100+1
|
||||||
self.__ax.grid(visible=True,which="major",axis="y")
|
self._ax.set_ylim(start-bond,end+bond)
|
||||||
self.__canvas.draw()
|
if(step>0):
|
||||||
|
ticks=np.arange(start, end,step)
|
||||||
|
self._ax.yaxis.set_ticks(ticks,minor=True)
|
||||||
|
# ticks=self._ax.yaxis.get_ticklocs()
|
||||||
|
# self._ax.yaxis.set_ticks(minor=True)
|
||||||
|
# self._ax.yaxis.set_ticks(ticks)
|
||||||
|
# self._ax.autoscale(enable=True, axis='both', tight=None)
|
||||||
|
self._canvas.draw()
|
||||||
|
def set_max(self,limit_max:int=None):
|
||||||
|
if(limit_max is not None):
|
||||||
|
if(self._line_max is not None):
|
||||||
|
self._line_max.remove()
|
||||||
|
self._line_max=None
|
||||||
|
print("remove max line")
|
||||||
|
self._line_max=self._ax.axhline(y=limit_max,color='g',linestyle='--')
|
||||||
|
self._max=limit_max
|
||||||
|
def set_min(self,limit_min:int=None):
|
||||||
|
if(limit_min is not None):
|
||||||
|
if(self._line_min is not None):
|
||||||
|
print("remove min line")
|
||||||
|
self._line_min.remove()
|
||||||
|
self._line_min=None
|
||||||
|
self._line_min=self._ax.axhline(y=limit_min,color='r',linestyle='--')
|
||||||
|
self._min=limit_min
|
||||||
|
|
||||||
def save(self,path:str,perfix:str):
|
def save(self,path:str,perfix:str):
|
||||||
path=os.path.join(path,"pic")
|
path=os.path.join(path,"pic")
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
name=os.path.join(path,perfix+self._title)
|
name=os.path.join(path,perfix+self._title)
|
||||||
self.__figure.savefig(name+'.png')
|
self._figure.savefig(name+'.png')
|
||||||
def lable(self,lablex,labley):
|
def lable(self,lablex,labley):
|
||||||
self.__ax.set_ylabel(labley)
|
self._ax.set_ylabel(labley)
|
||||||
self.__ax.set_xlabel(lablex)
|
self._ax.set_xlabel(lablex)
|
||||||
def canvas(self):
|
def canvas(self):
|
||||||
return self.__canvas
|
return self._canvas
|
||||||
|
|
||||||
|
|
||||||
# 定义一个任务需要的参数布局
|
# 定义一个任务需要的参数布局
|
||||||
class TParamLayout(QObject):
|
class TParamLayout(QObject):
|
||||||
def __init__(self) -> None:
|
item_change_signal =pyqtSignal([int,str,str])
|
||||||
|
def __init__(self,index) -> None:
|
||||||
QObject.__init__(self)
|
QObject.__init__(self)
|
||||||
self.__layout=QFormLayout()
|
self._layout=QFormLayout()
|
||||||
self.__items=[]
|
self._items=[]
|
||||||
|
self._index=index
|
||||||
|
def change_slot(self,text:str):
|
||||||
|
edit=self.sender()
|
||||||
|
# name=self.find_label(edit)
|
||||||
|
# print(edit.text()) 不用转换类型,直接就可以用 QLineEdit 的方法
|
||||||
|
name=edit.objectName()
|
||||||
|
# print(name,"text changed",text)
|
||||||
|
self.item_change_signal.emit(self._index,name,text)
|
||||||
|
def find_label(self,edit):
|
||||||
|
for i in self._items:
|
||||||
|
if(i[1]==edit):
|
||||||
|
return i[0].text()
|
||||||
|
return "none"
|
||||||
def add_item(self,name:str,value:str="",tooltip:str=None):
|
def add_item(self,name:str,value:str="",tooltip:str=None):
|
||||||
line_edit = QLineEdit()
|
line_edit = QLineEdit()
|
||||||
line_edit.setObjectName(value)
|
line_edit.setObjectName(name)
|
||||||
line_edit.setText(value)
|
line_edit.setText(value)
|
||||||
|
line_edit.textChanged.connect(self.change_slot)
|
||||||
line_edit_label = QLabel()
|
line_edit_label = QLabel()
|
||||||
line_edit_label.setObjectName(name)
|
line_edit_label.setObjectName(name)
|
||||||
line_edit_label.setText(name)
|
line_edit_label.setText(name)
|
||||||
@@ -79,20 +123,20 @@ class TParamLayout(QObject):
|
|||||||
if(tooltip!=None):
|
if(tooltip!=None):
|
||||||
line_edit_label.setToolTip(tooltip)
|
line_edit_label.setToolTip(tooltip)
|
||||||
line_edit.setToolTip(tooltip)
|
line_edit.setToolTip(tooltip)
|
||||||
self.__layout.addRow(line_edit_label,line_edit)
|
self._layout.addRow(line_edit_label,line_edit)
|
||||||
self.__items.append((line_edit_label,line_edit))
|
self._items.append((line_edit_label,line_edit))
|
||||||
def item_value(self,name:str):
|
def item_value(self,name:str):
|
||||||
for i in self.__items:
|
for i in self._items:
|
||||||
if(i[0].text()==name):
|
if(i[0].text()==name):
|
||||||
return i[1].text()
|
return i[1].text()
|
||||||
return None
|
return None
|
||||||
def values(self):
|
def values(self):
|
||||||
vals=[]
|
vals=[]
|
||||||
for i in self.__items:
|
for i in self._items:
|
||||||
vals.append((i[0].text(),i[1].text()))
|
vals.append((i[0].text(),i[1].text()))
|
||||||
return vals
|
return vals
|
||||||
def layout(self):
|
def layout(self):
|
||||||
return self.__layout
|
return self._layout
|
||||||
|
|
||||||
class Analysis(QWidget):
|
class Analysis(QWidget):
|
||||||
data_recv_end_signal =pyqtSignal([list,list])
|
data_recv_end_signal =pyqtSignal([list,list])
|
||||||
@@ -102,18 +146,28 @@ class Analysis(QWidget):
|
|||||||
self.setWindowTitle("检测数据分析")
|
self.setWindowTitle("检测数据分析")
|
||||||
self.calc_item_end_signal.connect(self.calc_item_end_slot)
|
self.calc_item_end_signal.connect(self.calc_item_end_slot)
|
||||||
self.data_recv_end_signal.connect(self.data_recv_end_slot)
|
self.data_recv_end_signal.connect(self.data_recv_end_slot)
|
||||||
self.__import_but = QPushButton("导入方案",self)
|
self._import_but = QPushButton("导入方案",self)
|
||||||
self.__import_but.clicked.connect(self.import_but_clicked)
|
self._import_but.clicked.connect(self.import_but_clicked)
|
||||||
self.__import_but.setGeometry(QRect(0,0,100,27))
|
self._import_but.setGeometry(QRect(0,0,100,27))
|
||||||
self.__export_but = QPushButton("导出数据")
|
self._export_but = QPushButton("导出数据")
|
||||||
self.__export_but.clicked.connect(self.export_but_clicked)
|
self._export_but.clicked.connect(self.export_but_clicked)
|
||||||
|
|
||||||
self.__scroll=QScrollArea(self)
|
self._scroll=QScrollArea(self)
|
||||||
self.__scroll.setGeometry(0,30,1230,700)
|
self._scroll.setGeometry(0,30,1230,700)
|
||||||
# 设置布局
|
# 设置布局
|
||||||
self.__layout = QFormLayout()
|
self._layout = QFormLayout()
|
||||||
self.__layout.addRow(' ',self.__export_but)
|
self._layout.addRow(' ',self._export_but)
|
||||||
self.__items=[]
|
self._items=[]
|
||||||
|
def item_changed_slot(self,index:int,name:str,value:str):
|
||||||
|
print(index,name,value)
|
||||||
|
if(len(value)==0):
|
||||||
|
return
|
||||||
|
figure=self._items[index][0]
|
||||||
|
if(name.find("LimitMax")>=0):
|
||||||
|
figure.set_max(int(value))
|
||||||
|
if(name.find("LimitMin")>=0):
|
||||||
|
figure.set_min(int(value))
|
||||||
|
figure.draw()
|
||||||
def add_item(self,data_dict:dict):
|
def add_item(self,data_dict:dict):
|
||||||
data=data_dict["data"]
|
data=data_dict["data"]
|
||||||
x=data_dict["x"]
|
x=data_dict["x"]
|
||||||
@@ -129,7 +183,7 @@ class Analysis(QWidget):
|
|||||||
y=data_dict["y"]
|
y=data_dict["y"]
|
||||||
figure = QFigure(name)
|
figure = QFigure(name)
|
||||||
figure.lable("序号","数值")
|
figure.lable("序号","数值")
|
||||||
tplayout=TParamLayout()
|
tplayout=TParamLayout(self._item_index)
|
||||||
tplayout.add_item(name+":Max",str(max))
|
tplayout.add_item(name+":Max",str(max))
|
||||||
tplayout.add_item(name+":Min",str(min))
|
tplayout.add_item(name+":Min",str(min))
|
||||||
tplayout.add_item(name+":Avg",str(avg))
|
tplayout.add_item(name+":Avg",str(avg))
|
||||||
@@ -137,11 +191,13 @@ class Analysis(QWidget):
|
|||||||
tplayout.add_item(name+":Std",str(std))
|
tplayout.add_item(name+":Std",str(std))
|
||||||
tplayout.add_item(name+":LimitMax",str(limit_max))
|
tplayout.add_item(name+":LimitMax",str(limit_max))
|
||||||
tplayout.add_item(name+":LimitMin",str(limit_min))
|
tplayout.add_item(name+":LimitMin",str(limit_min))
|
||||||
self.__layout.addRow(figure.canvas(),tplayout.layout())
|
tplayout.item_change_signal.connect(self.item_changed_slot)
|
||||||
figure.draw(range(len(data)),data,lable="原始值",limit_max=limit_max,limit_min=limit_min)
|
self._layout.addRow(figure.canvas(),tplayout.layout())
|
||||||
figure.draw(dat_count,y,lable="权重")
|
figure.set_lines(range(len(data)),data,lable="原始值",limit_max=limit_max,limit_min=limit_min)
|
||||||
|
figure.set_lines(dat_count,y,lable="权重")
|
||||||
|
figure.draw()
|
||||||
# figure.save(self._save_path,str(self._item_index)+".")
|
# figure.save(self._save_path,str(self._item_index)+".")
|
||||||
self.__items.append((figure,tplayout,self._item_index))
|
self._items.append((figure,tplayout,self._item_index))
|
||||||
self._item_index+=1
|
self._item_index+=1
|
||||||
def calc_item_end_slot(self,data:list):
|
def calc_item_end_slot(self,data:list):
|
||||||
print("calc_item end.")
|
print("calc_item end.")
|
||||||
@@ -149,8 +205,8 @@ class Analysis(QWidget):
|
|||||||
widget.setGeometry(QRect(0,0,1200,20000))
|
widget.setGeometry(QRect(0,0,1200,20000))
|
||||||
for i in data:
|
for i in data:
|
||||||
self.add_item(i)
|
self.add_item(i)
|
||||||
widget.setLayout(self.__layout)
|
widget.setLayout(self._layout)
|
||||||
self.__scroll.setWidget(widget)
|
self._scroll.setWidget(widget)
|
||||||
|
|
||||||
def calc_item(self,data,name:str):
|
def calc_item(self,data,name:str):
|
||||||
length=len(data)
|
length=len(data)
|
||||||
@@ -188,7 +244,7 @@ class Analysis(QWidget):
|
|||||||
# 连接的绘制的方法
|
# 连接的绘制的方法
|
||||||
def import_but_clicked(self):
|
def import_but_clicked(self):
|
||||||
self.sch_data=scheme_data.sch_data()
|
self.sch_data=scheme_data.sch_data()
|
||||||
self.__import_but.setEnabled(False)
|
self._import_but.setEnabled(False)
|
||||||
ack=self.sch_data.select_scheme()
|
ack=self.sch_data.select_scheme()
|
||||||
if(ack!=True):
|
if(ack!=True):
|
||||||
return
|
return
|
||||||
@@ -219,7 +275,7 @@ class Analysis(QWidget):
|
|||||||
def export_but_clicked(self):
|
def export_but_clicked(self):
|
||||||
ret_limit=[]
|
ret_limit=[]
|
||||||
ret_values=[]
|
ret_values=[]
|
||||||
for i,t in zip(self.__items,self.titles):
|
for i,t in zip(self._items,self.titles):
|
||||||
max=i[1].item_value(t+":LimitMax")
|
max=i[1].item_value(t+":LimitMax")
|
||||||
min=i[1].item_value(t+":LimitMin")
|
min=i[1].item_value(t+":LimitMin")
|
||||||
ret_limit.append((max,min))
|
ret_limit.append((max,min))
|
||||||
|
@@ -325,5 +325,52 @@ class sch_data(object):
|
|||||||
save_f.write(json_str.encode("utf-8"))
|
save_f.write(json_str.encode("utf-8"))
|
||||||
save_f.close()
|
save_f.close()
|
||||||
print("scheme export end.")
|
print("scheme export end.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 显示所有方案文件的方案id
|
||||||
|
|
||||||
|
|
||||||
|
# 找到指定后缀的文件
|
||||||
|
def find_type(path:str,fix:str):
|
||||||
|
# path = os.getcwd()
|
||||||
|
# print("path",path)
|
||||||
|
list=os.listdir(path)
|
||||||
|
# print("list",list)
|
||||||
|
file_list=[]
|
||||||
|
for i in list:
|
||||||
|
ps=os.path.join(path, i)
|
||||||
|
if os.path.isdir(ps):
|
||||||
|
# print("path join",ps)
|
||||||
|
file_list+=find_type(ps,fix)
|
||||||
|
else:
|
||||||
|
if(ps[-len(fix):]==fix):
|
||||||
|
file_list.append(ps)
|
||||||
|
# print("file_list", file_list)
|
||||||
|
return file_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def show_scheme_id(file_list):
|
||||||
|
id_list=[]
|
||||||
|
for i in file_list:
|
||||||
|
with open(i,"rb") as f:
|
||||||
|
json_obj=json.loads(f.read())
|
||||||
|
try:
|
||||||
|
id_list.append((i,json_obj["PlanID"]))
|
||||||
|
except Exception as e:
|
||||||
|
id_list.append((i,0))
|
||||||
|
return id_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
_main()
|
# _main()
|
||||||
|
file_list=find_type('./','.json')
|
||||||
|
id_list=show_scheme_id(file_list)
|
||||||
|
for i in id_list:
|
||||||
|
print(i[1],i[0])
|
||||||
|
@@ -5,10 +5,10 @@ import json
|
|||||||
|
|
||||||
import prottcp
|
import prottcp
|
||||||
|
|
||||||
BOOT_PATH ="file/checker_slave_boot_can.bin"
|
BOOT_PATH ="file/checker_slave_boot_uart--1.bin"
|
||||||
APP_PATH ="file/checker_slave_app_can.bin"
|
APP_PATH ="file/checker_slave_app_uart_20230912--2.bin"
|
||||||
SCHEME_PATH = "file/YM硬件EX工厂注码091902--9.json"
|
SCHEME_PATH = "file/YM硬件EJ工厂注码103101--17.json"
|
||||||
OUT_PATH = "file/checker_slave_boot_can_.bin"
|
OUT_PATH = "file/checker_slave_boot_uart_.bin"
|
||||||
|
|
||||||
# 创建离线下载器的镜像
|
# 创建离线下载器的镜像
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user