You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
5.3 KiB
143 lines
5.3 KiB
import wx
|
|
import numpy as np
|
|
from enum import Enum
|
|
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas #FigureCanvasWxAgg
|
|
from matplotlib.backends.backend_wx import NavigationToolbar2Wx as NavigationToolbar # FIgure 导航
|
|
from matplotlib.figure import Figure
|
|
|
|
class LineColor(Enum):
|
|
RED = 0
|
|
ORANGE = 1
|
|
YELLOW = 2
|
|
GREEN = 3
|
|
CYAN = 4
|
|
BLUE = 5
|
|
PURPLE = 6
|
|
|
|
|
|
class Plot(wx.Panel):
|
|
'''
|
|
# 需要在 Frame 实例化一个实例
|
|
# 改变需要对实例化后的进行操作
|
|
'''
|
|
'''
|
|
Matplotlib Panel 单独拿出来画图
|
|
可以 __do_layout
|
|
可以 __add_widgets
|
|
可以 button事件
|
|
可以鼠标事件
|
|
'''
|
|
def __init__(self,parent):
|
|
'''
|
|
* panel 初始化后的样子
|
|
'''
|
|
super(Plot,self).__init__(parent)
|
|
# 本地化语言
|
|
self.locale = wx.Locale(wx.LANGUAGE_CHINESE_SIMPLIFIED)
|
|
|
|
self.Figure = Figure(figsize=(4,3)) # 4,3 为英寸
|
|
self.axes = self.Figure.add_axes([0.1,0.1,0.8,0.8],facecolor="lightgray") # 坐标系起始位置
|
|
self.FigureCanvas = FigureCanvas(self,-1,self.Figure)
|
|
|
|
#继承鼠标移动显示鼠标处坐标的事件
|
|
# self.FigureCanvas.mpl_connect('motion_notify_event',self.MPLOnMouseMove)
|
|
|
|
# self.NavigationToolbar = NavigationToolbar(self.FigureCanvas)
|
|
|
|
# self.StaticText = wx.StaticText(self,-1,label=u'坐标信息')
|
|
|
|
# self.SubBoxSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
# self.SubBoxSizer.Add(self.NavigationToolbar,proportion =0, border = 2,flag = wx.ALL | wx.EXPAND)
|
|
# self.SubBoxSizer.Add(self.StaticText,proportion =-1, border = 2,flag = wx.ALL | wx.EXPAND)
|
|
|
|
self.TopBoxSizer = wx.BoxSizer(wx.VERTICAL)
|
|
# self.TopBoxSizer.Add(self.SubBoxSizer,proportion =-1, border = 2,flag = wx.ALL | wx.EXPAND)
|
|
self.TopBoxSizer.Add(self.FigureCanvas,proportion =-10, border = 2,flag = wx.ALL | wx.EXPAND)
|
|
|
|
self.SetSizer(self.TopBoxSizer)
|
|
|
|
self.purewater_legend = ("Pure Water Attenuation Coefficience"
|
|
,"Wavelength (nm)"
|
|
,"Attenuation Coefficience m(-1)" )
|
|
|
|
self.measure_legend = (" Attenuation Coefficient"
|
|
,"Wavelength (nm)"
|
|
,"Attenuation Coefficience m(-1)" )
|
|
|
|
def set_axes_title(self,title):
|
|
self.axes.set_title(title)
|
|
|
|
def set_axes_xlabel(self,x):
|
|
self.axes.set_xlabel(x)
|
|
|
|
def set_axes_ylable(self,y):
|
|
self.axes.set_ylabel(y)
|
|
|
|
def set_title_x_y(self,title, x, y):
|
|
self.axes.set_title(title)
|
|
self.axes.set_xlabel(x)
|
|
self.axes.set_ylabel(y)
|
|
|
|
def plot_one( self, time_, wavelength:np.ndarray, data:np.ndarray, color="green" ):
|
|
self.axes.plot(wavelength, data, color=color, linewidth=0.5 , label=time_ )
|
|
self.axes.legend( )
|
|
self.axes.grid( True )
|
|
self.FigureCanvas.draw()
|
|
|
|
|
|
def plot_multi( self, tm, wavelength:np.ndarray, data:np.ndarray ):
|
|
len_ = len(data)
|
|
for i in range(len_):
|
|
print(f"========== {len(wavelength)} {len(data[i])}")
|
|
print()
|
|
self.axes.plot(wavelength, data[i], color=LineColor(i).name.lower(), linewidth=0.5 , label=tm[i] )
|
|
self.axes.legend( )
|
|
self.axes.grid(True)
|
|
self.FigureCanvas.draw()
|
|
|
|
def clear_past( self, ):
|
|
self.axes.clear()
|
|
|
|
# def MPLOnMouseMove(self,event):
|
|
# '''
|
|
# * 显示坐标值
|
|
# '''
|
|
# ex=event.xdata#这个数据类型是numpy.float64
|
|
# ey=event.ydata#这个数据类型是numpy.float64
|
|
# if ex and ey :
|
|
# #可以将numpy.float64类型转化为float类型,否则格式字符串可能会出错
|
|
# self.StaticText.SetLabel('%10.5f,%10.5f' % (float(ex),float(ey)))
|
|
|
|
class MyPanel(wx.Panel):
|
|
"""docstring for MyPanel."""
|
|
def __init__(self, *arg, **kwarg):
|
|
super(MyPanel, self).__init__( *arg,**kwarg)
|
|
|
|
self.SetBackgroundColour("#F2F2F2")
|
|
self.sb = wx.StaticBox( self, label='系统信息', pos = (30,30) )
|
|
|
|
self.sbs = wx.StaticBoxSizer( self.sb, orient=wx.VERTICAL )
|
|
|
|
self.vbox1 = wx.BoxSizer(wx.VERTICAL)
|
|
self.staticText0 = wx.StaticText(self , label='',size=(60, 30), style=wx.ALIGN_CENTRE_VERTICAL )
|
|
|
|
self.staticText1 = wx.StaticText(self, -1,size=(600, -1),
|
|
label='''\n上海奕枫仪器设备有限公司
|
|
\n电话: 021-54270075
|
|
\n网站: http://www.yi-win.com
|
|
\n邮件: sales@yi-win.com
|
|
\n描述: AWRAMS离线数据处理 ''' )
|
|
|
|
|
|
self.vbox1.Add(self.staticText0, flag=wx.TOP|wx.LEFT, border=5)
|
|
self.vbox1.Add(self.staticText1, flag=wx.TOP|wx.LEFT, border=5)
|
|
# self.hbox1.Add(self.staticText1, flag=wx.TOP|wx.LEFT, border=5)
|
|
# self.hbox1.Add(self.textCtrl1, flag=wx.TOP|wx.LEFT, border=5)
|
|
self.sbs.Add(self.vbox1, flag=wx.TOP|wx.LEFT, border= 5)
|
|
self.SetSizer(self.sbs)
|
|
|
|
|
|
def setStaticText(self, msg:str):
|
|
self.staticText1.SetLabel(msg)
|
|
|
|
|