Python 如何在wxmpl中使用时间格式(不适用于MATPLOTLIB)

Python 如何在wxmpl中使用时间格式(不适用于MATPLOTLIB),python,plot,wxmpl,Python,Plot,Wxmpl,我在下面列出了绘制的时间列表: time_list = [63158,63159,63200,63201,63202] 但我希望在图形中这样: time_list = [6:31:58,6:31:59,6:32:00,6:32:01,6:32:02] 在63159和63200之间,不应该表现为其中有40个数字 我可以将它与matplotlib库一起使用,但就我而言wxmpl比它更好 所以我的问题是除了matplotlib之外,如何对任何绘图库使用时间格式 #!/usr/bin/env pyt

我在下面列出了绘制的时间列表:

time_list = [63158,63159,63200,63201,63202]
但我希望在图形中这样:

time_list = [6:31:58,6:31:59,6:32:00,6:32:01,6:32:02]
在63159和63200之间,不应该表现为其中有40个数字

我可以将它与matplotlib库一起使用,但就我而言wxmpl比它更好

所以我的问题是除了matplotlib之外,如何对任何绘图库使用时间格式

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import time
from wxmplot import PlotPanel
import wx

x=[]       
class MyFrame1 ( wx.Frame ):   

    def __init__( self, parent, **kws ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 595,476 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL, **kws )     

        self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )

        bSizer1 = wx.BoxSizer( wx.VERTICAL )

        bSizer2 = wx.BoxSizer( wx.VERTICAL )

        gSizer1 = wx.GridSizer( 0, 0, 0, 0 )

        ###############################
        self.plotpanel = PlotPanel(self)                                  
        ###############################

        self.toggleBtn4 = wx.ToggleButton( self, wx.ID_ANY, u"Plot", wx.DefaultPosition, wx.DefaultSize, 0 )
        gSizer1.Add( self.toggleBtn4, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_CENTER_HORIZONTAL, 5 )

        bSizer2.Add( gSizer1, 1, wx.EXPAND, 5 )

        bSizer1.Add( bSizer2, 1, wx.EXPAND, 5 )
        bSizer3 = wx.BoxSizer( wx.VERTICAL )
        bSizer3.Add(self.plotpanel, 1, wx.ALL|wx.EXPAND, 0 )
        bSizer1.Add( bSizer3, 3, wx.EXPAND, 5 )
        self.SetSizer( bSizer1 )
        #bSizer1.Fit(self)

        self.Centre( wx.BOTH )

        # Connect Events     
        self.toggleBtn4.Bind( wx.EVT_TOGGLEBUTTON, self.plot )   

    def plot( self, event ):
        time_list = [63150,63151,63152,63153,63154,63155,63156,63157,63158,63159,63200,63201,63202,63203,63204,63205,63206,63207,63208,63209,63210]
        y = [100,101,105,124,119,134,89,147,98,75,52,150,143,156,99,13,54,68,100,85,87]
        obj = event.GetEventObject()
        isPressed = obj.GetValue()  
        if isPressed:
            for i in time_list:                                  
                hour = i//10000
                minute = (i//100)%100
                second = i%100
                time_new = hour*3600 + minute*60 + second                             
                x.append(time_new)                                                 

                print("i   : ",i)
                print("zaman : ",time_new)

                time4 = time.strftime('%H:%M:%S', time.gmtime(time_new))
                print("time  : ",time4,"\n")

            self.plotpanel.plot(x, y)

        else: 
            self.Destroy()


if __name__ == "__main__":
    app = wx.App(False)             
    f = MyFrame1(None)       
    f.Show(True)          
    app.MainLoop()

目前,
wxmplot.PlotPanel.plot()
(和
.oplot()
)仅在使用
plot(扩展数据,ydata,use_dates=True)
且仅将
xdata
作为Unix时间戳时,才支持将
xdata
自动转换为日期时间值

也就是说,
使用日期=True

from datetime import datetime
from matplotlib import dates

...
def plot(xdata, ydata, ..., use_dates=False, ....):  
   ...
   if use_dates: 
       xdata = dates.date2num([datetime.fromtimestamp(i) for i in xdata])
因此,我认为您必须将时间数据的自定义编码转换为更标准的时间表示形式。我认为你有两个选择:

  • time\u列表
    数据转换为时间戳(从纪元开始的秒数),并使用
    use\u dates=True

  • time\u列表
    数据转换为
    matplotlib.dates
    的实例,可能使用
    datetime
    作为中间形式,并使用
    use\u dates=False


  • 目前,
    wxmplot.PlotPanel.plot()
    (和
    .oplot()
    )仅在使用
    plot(扩展数据,ydata,use_dates=True)
    且仅将
    xdata
    作为Unix时间戳时,才支持将
    xdata
    自动转换为日期时间值

    也就是说,
    使用日期=True

    from datetime import datetime
    from matplotlib import dates
    
    ...
    def plot(xdata, ydata, ..., use_dates=False, ....):  
       ...
       if use_dates: 
           xdata = dates.date2num([datetime.fromtimestamp(i) for i in xdata])
    
    因此,我认为您必须将时间数据的自定义编码转换为更标准的时间表示形式。我认为你有两个选择:

  • time\u列表
    数据转换为时间戳(从纪元开始的秒数),并使用
    use\u dates=True

  • time\u列表
    数据转换为
    matplotlib.dates
    的实例,可能使用
    datetime
    作为中间形式,并使用
    use\u dates=False


  • 我有一个同样的问题: 我使用wxmplot.interactive.plot,它有一个参数
    use_dates
    。 我尝试在Unix时间戳中转换数据,并将
    use\u dates=True
    如下所示:

                dt1 = dt.datetime(int(Year), int(Month), int(Day), int(hour), 
                                  int(minute),int(second))
                data_converted = time.mktime(dt1.timetuple())
    
    年、月、日、时、分、秒都是字符串。 在这里,您可以找到我创建图片时的结果,我的日期是x轴。

    当我看到结果时,我可以看到数据就像一个时间戳,所以不是很有用。你能告诉我我的数据转换是否正确吗?
    我想要x轴的数据,比如“Y:M:D:H:M:S”

    我有一个类似的问题: 我使用wxmplot.interactive.plot,它有一个参数
    use_dates
    。 我尝试在Unix时间戳中转换数据,并将
    use\u dates=True
    如下所示:

                dt1 = dt.datetime(int(Year), int(Month), int(Day), int(hour), 
                                  int(minute),int(second))
                data_converted = time.mktime(dt1.timetuple())
    
    年、月、日、时、分、秒都是字符串。 在这里,您可以找到我创建图片时的结果,我的日期是x轴。

    当我看到结果时,我可以看到数据就像一个时间戳,所以不是很有用。你能告诉我我的数据转换是否正确吗?
    我想要x轴的数据,如“Y:M:D:H:M:S”

    @M Newville,先生。在将绘图类型切换到
    plotpanel.update\u line()
    之后,我在上面应用了
    use\u dates
    ,但它给出了一个错误:
    update\u line()得到了一个意外的关键字参数“use\u dates”
    你的问题不是关于
    update\u line()
    ,这是关于
    plot()
    update_line()
    不支持
    use_dates
    ,因为它希望您能够控制
    xdata
    ydata
    ,并希望尽快更新打印跟踪。因此,正如上面的答案所提示的,在将数据发送到
    update\u line()
    @M Newville之前,您应该自己使用
    dates.date2num()
    进行转换,先生,在将我的绘图类型切换到
    plotpanel.update\u line()
    之后,我在其上应用了
    使用\u dates
    ,但它给出了一个错误:
    update\u line()获取了一个意外的关键字参数“使用日期”
    您的问题不是关于
    update\u line()
    ,而是关于
    plot()
    update_line()
    不支持
    use_dates
    ,因为它希望您能够控制
    xdata
    ydata
    ,并希望尽快更新打印跟踪。因此,正如上面的答案所提示的,在将数据发送到
    update\u line()
    之前,您应该自己使用
    dates.date2num()
    进行转换。我也尝试过这种方法,将数据转换为matplotlib.dates的实例,可能使用datetime作为中间形式,并使用use\u dates=False,但效果也不太好。我可以看到x轴的值与第一个解决方案不同。我也尝试过这种方法,将数据转换为matplotlib.dates的实例,可能使用datetime作为中间形式,并使用use_dates=False,但效果也不太好。我可以看到x轴的值与第一个解不同。