显示小数秒的 Matplotlib x 轴格式化程序——不会消失

Matplotlib x-axis formatter showing decimal seconds--won't go away

我对 Python 还是比较陌生,我在使用 matplotlib 的轴格式化程序时遇到了一些麻烦。

我的轴使用 datetime 值并显示小时、分钟、秒,然后是小数秒。我想摆脱小数点并能够在 x 轴或类似的东西上显示 Year/day/month Hour:minute:second 。首先,我只是尝试获取 Year/month/day。然而,DateFormatter似乎没有任何效果。

我的大部分信息都来自这两个链接:format dates and Matplotlib instruction

我的简化代码如下: tftdatetime 类型的列表列表(因此 tft[event_num]),跨越数周,数据精确到秒。

import matplotlib.pyplot as plt
from Tkinter import *
from PIL import ImageTk, Image
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np
from images_to_list import images_to_list
from tkFileDialog import askopenfilename, askdirectory
import matplotlib.dates as mdates

extra = Tk()
extra.update()


class App:

    def __init__(self, master):

        self.event_num = 1
        # Create a container
        self.frame = Frame(master)

        self.fig = Figure()
        self.fig.set_size_inches(9,7)
        self.ax = self.fig.add_subplot(111)
        self.ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
        self.fig.autofmt_xdate()
        self.line, = self.ax.plot(tft[self.event_num],tf1[self.event_num],'.')
        self.line2, = self.ax.plot(tft[self.event_num],tf2[self.event_num],'.')
        self.ax.set_ylim([0,3.5])
        self.canvas = FigureCanvasTkAgg(self.fig,master=self.frame)
        self.canvas.get_tk_widget().grid(row=3,column=0,columnspan=4)
        self.frame.grid(row=0,column=0)




app = App(extra)
extra.mainloop()

我认为您需要为 xticks 设置 major formatter:

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))

请注意,fmt_xdata 似乎会更改 x 轴上鼠标悬停值的格式,而不是刻度本身。