python matplatlib 格式化坐标轴时间 datetime

使用 matplatlib.pyploy 可以非常方便的将数组转换成时间。但是,如果是时间 datetime.datetime() 作为坐标轴,如果不对时间进行优化,将会显得非常紧凑。

对坐标轴时间进行优化,用到的库为 matplatlib.dates。主要代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# from matplotlib.dates import YearLocator, MonthLocator, DayLocator
# from matplotlib.dates import drange, DateLocator, DateFormatter
# from matplotlib.dates import HourLocator, MinuteLocator, SecondLocator

def gen_image_2(l):
    # 格式化刻度单位
    # years=mdates.YearLocator()
    # months=mdates.MonthLocator()
    # days=mdates.DayLocator()
    hours = mdates.HourLocator()
    minutes = mdates.MinuteLocator()
    seconds = mdates.SecondLocator()

    # dateFmt = mdates.DateFormatter('%Y-%m-%d %H:%M')
    # dateFmt = mdates.DateFormatter('%Y-%m-%d')
    dateFmt = mdates.DateFormatter('%H:%M')  # 显示格式化后的结果

    if len(l) != 2:
        return False

    x = l[0]
    y = l[1]

    fig, ax = plt.subplots()    # 获得设置方法
    # format the ticks
    ax.xaxis.set_major_locator(hours)  # 设置主要刻度
    ax.xaxis.set_minor_locator(minutes)  # 设置次要刻度
    ax.xaxis.set_major_formatter(dateFmt)  # 刻度标志格式

    # 添加图片数据
    # plt.plot_date(dates, y, 'm-', marker='.', linewidth=1)
    plt.plot_date(x, y, '-', marker='.')
    # plt.plot(x, y)


    fig.autofmt_xdate()  # 自动格式化显示方式

    plt.show()  # 显示图片

以下部分是用来格式化坐标轴上的刻度的。

格式化刻度单位

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

# 设置方法
fig, ax = plt.subplots()

# 转化刻度单位
# years=mdates.YearLocator()
# months=mdates.MonthLocator()
# days=mdates.DayLocator()
hours = mdates.HourLocator()
minutes = mdates.MinuteLocator()
seconds = mdates.SecondLocator()

# 应用刻度单位
ax.xaxis.set_major_locator(hours)  # 设置主要刻度
ax.xaxis.set_minor_locator(minutes)  # 设置次要刻度
ax.xaxis.set_major_formatter(dateFmt)  # 刻度标志格式

显示格式化后的结果

1
2
3
4
5
6
7
# 显示
# dateFmt = mdates.DateFormatter('%Y-%m-%d %H:%M')
# dateFmt = mdates.DateFormatter('%Y-%m-%d')
dateFmt = mdates.DateFormatter('%H:%M')  # 显示格式化后的结果

# 应用
ax.xaxis.set_major_formatter(dateFmt)  # 刻度标志格式

填充数据

1
2
3
4
# 添加图片数据
# plt.plot_date(dates, y, 'm-', marker='.', linewidth=1)
plt.plot_date(x, y, '-', marker='.')
# plt.plot(x, y)

坐标轴刻度显示方式

1
fig.autofmt_xdate()  # 自动格式化显示方式

显示或保存图片

1
2
plt.show()  # 显示图片
plt.

注意: fig.autofmt_xdate() 必须用在填充数据之后 如果不使用 fig.autofmt_xdate() 那么坐标轴显示标志会水平与坐标轴。如果使用了,则会斜靠在坐标轴上,这样就可以显示更多的长标志

figure_1.png

github 代码托管

matplatlib API demon matplot 格式化坐标轴时间表示