私はmatplotlibの新バージョンです。私はそれを使って.csvファイルのデータを表示しました。コードは以下の通りです。 (リンクされたコードfuncは以下の通りです: "onMotion")は私が望むものではありません(オリジナルの.csvファイルからHH:MM:SSとして適切な文字列を表示します)、私はそれを浮動小数点数と見なしますが、それは時間に、それはまだ私が期待したものではありません。私はそれを正しくするために何をすべきですか?どんな提案も事前に大いに評価されています。matplotlib + wxpythonはx-ax時間文字列データを表示しません
CSV file data is below:
Time CPU MEMEMORY FLOW
21:41:45 7 2.065984885 0
21:41:49 24 2.143804486 207.1622516
21:41:53 18 2.099176758 254.0634666
21:41:57 16 2.148127797 546.959479
21:42:01 25 2.120096005 837.3973892
21:42:05 14 2.123164162 865.6367548
21:42:09 19 2.126511241 894.4122738
21:42:13 16 2.090111751 924.6048394
21:42:17 16 2.088717134 953.8266646
21:42:21 18 2.090948521 985.3669382
uが見ることができるように、このファイル内の時刻の形式はHH:MM:SSが、matplotlibのは、以下の画像のように、それを示しています。
import matplotlib.pyplot as plt
import pandas as pd
import wx
class CanvasFrame(wx.Frame):
orgData= None
def __init__(self):
self.pro = None
wx.Frame.__init__(self,None,-1, 'App Detection',size=(800,350))
self.orgData =pd.read_csv('data.csv')
self.orgData["Time"] = pd.to_datetime(self.orgData["Time"])
self.SetBackgroundColour("WHITE")
self.figure = plt.figure()
self.axes = self.figure.add_subplot(111)
self.CPU, = self.axes.plot(self.orgData["Time"], self.orgData["CPU"])
self.MEMEMORY, = self.axes.plot(self.orgData["Time"], self.orgData["MEMEMORY"], "m")
plt.xlabel("Time")
plt.ylabel("Usage(%)")
plt.title("Usage of App")
self.axes2 = self.axes.twinx()
self.FLOW, = self.axes2.plot(self.orgData["Time"], self.orgData["FLOW"], "r")
self.axes2.set_ylabel("FLOW(kb)")
self.ins = (self.CPU,)+(self.MEMEMORY,)+(self.FLOW,)
self.labs = [l.get_label() for l in self.ins]
self.axes.legend(self.ins, self.labs, loc=2)
self.canvas = FigureCanvas(self, -1, self.figure)
self.statusbar = self.CreateStatusBar()
self.mouseMoveID = self.canvas.mpl_connect('motion_notify_event',self.onMotion)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.btnStart = wx.Button(self, -1, "Start")
self.Bind(wx.EVT_BUTTON, self.getData, self.btnStart)
self.btnGen = wx.Button(self, -1, "Gen Chart")
self.Bind(wx.EVT_BUTTON, self.genFigure, self.btnGen)
self.btnSave = wx.Button(self, -1, "Save")
self.Bind(wx.EVT_BUTTON, self.savePic, self.btnSave)
self.tip = wx.StaticText(self, -1, u"Tip: Tip string!")
self.tip.SetForegroundColour("red")
self.sizerH = wx.GridSizer(1,0)
self.sizerH.Add(self.btnStart,10, wx.ALL, 10)
self.sizerH.Add(self.btnGen,10, wx.ALL, 10)
self.sizerH.Add(self.btnSave,10, wx.ALL, 10)
self.sizer.Add(self.sizerH)
self.sizer.Add(self.tip)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
def onMotion(self, evt):
x = evt.x
y = evt.y
inaxes = evt.inaxes
xdata = evt.xdata
ydata = evt.ydata
self.statusbar.SetStatusText("%s, %s, %s, %s, %s" % (
x, y, inaxes, xdata, ydata))
FigureCanvas()クラスとは何ですか?私はあなたのコードをデバッグしようとしましたが、 'name 'としてエラーを出しています.CancelCanvasは定義されていません。 FigureCanvasのコードを追加してください。 –
@Amey 'from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas'。 'createStatusbar'も欠けています。しかし、完全な問題は実際にはwxの実装には依存しません。したがって、その部分を無視することができます。 @RealLau次回の質問には、[mcve]を入力してください。 – ImportanceOfBeingErnest