matplotlib+;wxpython不显示x轴时间字符串数据

matplotlib+;wxpython不显示x轴时间字符串数据,python,matplotlib,wxpython,Python,Matplotlib,Wxpython,我是matplotlib的更新版本,我用它来显示.csv文件的数据,代码如下,当我的鼠标运动被触发时,状态栏上显示的扩展数据(链接的代码函数如下:“onMotion”)不是我想要的(从原始.csv文件中显示一个正确的时间字符串为HH:MM:SS),我猜它是一个浮点数,但当我将它转换为时间时,这仍然不是我所期望的。我该怎么做才能使它正确?如有任何建议,请提前告知 CSV file data is below: Time CPU MEMEMORY FLOW 21:41:45 7

我是matplotlib的更新版本,我用它来显示.csv文件的数据,代码如下,当我的鼠标运动被触发时,状态栏上显示的扩展数据(链接的代码函数如下:“onMotion”)不是我想要的(从原始.csv文件中显示一个正确的时间字符串为HH:MM:SS),我猜它是一个浮点数,但当我将它转换为时间时,这仍然不是我所期望的。我该怎么做才能使它正确?如有任何建议,请提前告知

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
如您所见,该文件中的时间格式为HH:MM:SS,但matplotlib显示如下图所示。


要设置日期或时间的格式,可以使用
matplotlib.dates.DateFormatter
,如中所示。使用相应的时间调用此dateformatter将生成所需的格式化字符串

dateformatter = mdates.DateFormatter('%H:%M:%S')
dateformatter(xdata)
显示格式化时间的问题实际上与GUI实现无关。所以我忽略了这一点,只提供了一个解决方案,显示轴内的格式化时间。从这个问题可以清楚地看出,如何向GUI的状态栏提供格式化字符串

u = u"""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"""

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import io

df = pd.read_csv(io.StringIO(u), delim_whitespace=True)

df["Time"] = pd.to_datetime(df["Time"])

fig, ax = plt.subplots()

ax.plot(df["Time"], df["CPU"])
ax.plot(df["Time"], df["MEMEMORY"])

text = ax.text(0.02,0.98, "", transform=ax.transAxes, va="top")
dateformatter = mdates.DateFormatter('%H:%M:%S')

def onmousemove(evt):
    if evt.inaxes:
        xdata = evt.xdata
        xtime =  dateformatter(xdata)
        string = "%s" % (xtime)
        text.set_text(string)
        fig.canvas.draw_idle()

cid = fig.canvas.mpl_connect("motion_notify_event",onmousemove)

plt.show()

什么是FigureCanvas()类?我试图调试您的代码,但由于未定义名称“FigureCanvas”,因此出现错误。请为FigureCanvas添加代码好吗?@Amey
从matplotlib.backends.backend\u wxagg导入FigureCanvasWxAgg作为FigureCanvas
<代码>创建状态栏也丢失。但完整的问题实际上与wx中的实现无关。所以我们可以忽略这一部分@RealLau下次询问时,请提供一个。感谢您的建议,尽管我已经通过“xdata=plt.gca().get_xaxis().get_major_formatter()(evt.xdata)”解决了这个问题。
u = u"""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"""

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import io

df = pd.read_csv(io.StringIO(u), delim_whitespace=True)

df["Time"] = pd.to_datetime(df["Time"])

fig, ax = plt.subplots()

ax.plot(df["Time"], df["CPU"])
ax.plot(df["Time"], df["MEMEMORY"])

text = ax.text(0.02,0.98, "", transform=ax.transAxes, va="top")
dateformatter = mdates.DateFormatter('%H:%M:%S')

def onmousemove(evt):
    if evt.inaxes:
        xdata = evt.xdata
        xtime =  dateformatter(xdata)
        string = "%s" % (xtime)
        text.set_text(string)
        fig.canvas.draw_idle()

cid = fig.canvas.mpl_connect("motion_notify_event",onmousemove)

plt.show()