как использовать форматирование времени в wxmpl (НЕ ДЛЯ MATPLOTLIB) - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть список времени для построения графика:

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()

1 Ответ

1 голос
/ 07 апреля 2019

В настоящее время wxmplot.PlotPanel.plot().oplot()) поддерживает автоматическое преобразование xdata в значения даты и времени только при использовании plot(xdata, ydata, use_dates=True) и только с xdata в качестве меток времени Unix.

То есть use_dates=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])

Итак, я думаю, вам придется преобразовать свою пользовательскую кодировку данных времени в более стандартное представление времени. Я думаю, у вас есть два варианта:

  1. преобразуйте ваши time_list данные в метки времени (секунды с начала эпохи) и используйте use_dates=True.

  2. преобразовать ваши time_list данные в экземпляр matplotlib.dates, возможно, используя datetime в качестве промежуточной формы, и использовать use_dates=False.

...