axes.set xticklabels打断日期时间窗体

2024-06-26 18:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把我的意志强加于这个matplotlib图上。当我设置ax1.xaxis.set_major_formatter(myFmt)时,它工作得很好,就像在upper graph中一样。 但是,当我添加ax1.set_xticklabels((date),rotation=45)时,时间格式将恢复为matplotlib时间,就像在lower graph中一样。在

两者都使用相同的输入时间变量。我不仅尝试了时间格式的改变

    date_1 = np.vectorize(dt.datetime.fromtimestamp)(time_data) # makes a datetimeobject from unix timestamp
    date = np.vectorize(mdates.date2num)(date_1) # from datetime makes matplotib time
    myFmt = mdates.DateFormatter('%d-%m-%Y/%H:%M')

    ax1 = plt.subplot2grid((10,3), (0,0), rowspan=4, colspan=4)
    ax1.xaxis_date()
    ax1.plot(date, x)

    ax1.xaxis.set_major_formatter(myFmt) 
    ax1.set_xticklabels((date),rotation=45)#ignores time format

有没有办法把定制的时间格式强制到xticklabels上?但是可以直接读取变量的格式吗?特别是如果您以后想在自定义日期位置添加xtick。在

所有的想法都值得赞赏。干杯


Tags: datetimematplotlibformatter格式np时间graph
3条回答

您可以通过将datetime对象转换为字符串来强制时间格式。在

如果日期是utc格式,则必须对其进行特殊处理:

from datetime import datetime
str_dates = [datetime.utcfromtimestamp(timestamp).strftime('%d-%m-%Y/%H:%M') for timestamp in date]
ax1.set_xticklabels((str_dates),rotation=45)

定位器指定记号的位置。格式化程序在这些位置格式化tickLabel。使用格式化程序,比如

ax1.xaxis.set_major_formatter(dates.DateFormatter('%d-%m-%Y/%H:%M'))

因此效果很好。但是,在指定格式化程序之后使用set_xticklabels,将删除DateFormatter并用FixedFormatter替换它。因此,您将在自动选择的位置获得ticklabels,但标签与这些位置不对应。因此,图形的标签将不正确。 因此,您应该在不指定自定义定位器的情况下使用set_xticklabels,例如通过set_xticks。在

这里根本不需要使用set_xticklabels。光是格式化程序就足够了。在

^{pr2}$

enter image description here

好吧,我想我现在明白了。在

    str_dates = []
    for i in time_data:
        j = dt.datetime.fromtimestamp(i)
        k = j.strftime('%d-%m-%Y/%H:%M')
        str_dates.append(k)
    print(str_dates)
    ax1.set_xticklabels((str_dates),rotation=45)

我不知道为什么向量化不起作用,但是一个接一个地记录每个日期会消除数组给我的错误源。在

@iDrwish:再次感谢你把我推向正确的方向。在

相关问题 更多 >