【问题标题】:matplotlib - plot wrong datetimematplotlib - 绘制错误的日期时间
【发布时间】:2016-05-15 09:04:50
【问题描述】:

我会用 matplotlib 绘制一个图,其中 x 轴有带有 yy-mm-dd hh-mm-ss 的时间戳。我在 datetime64 (熊猫系列)中有 ts 并且还显示(右)分钟和秒,我使用 date2num 遵循link 中的提示。问题是它绘制了无意义的日期:

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as md   
for df in dfs:
    datenums=md.date2num(df.toPandas()["timestamp"])
    plt.xticks(rotation=25)
    xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
    ax.xaxis.set_major_formatter(xfmt)
    plt.plot(datenums,x)
    plt.show()

df.toPandas()["timestamp"] 是:

0   2015-12-15 03:53:13
Name: timestamp, dtype: datetime64[ns]

我尝试将 datetime64 转换为 datetime 但结果没有改变。

【问题讨论】:

  • 你能发布一些重现这个问题的代码吗?见MCVE?
  • 为什么你认为刻度标签是错误的?刻度线是均匀分布的,而不是放置的。如果您想准确控制刻度的放置位置,请使用广告 FixedLocator 作为 xaxis 主要定位器。

标签: python datetime matplotlib python-datetime


【解决方案1】:

如果您的时间戳值在 ,请使用它为所有刻度标签创建一个列表,然后考虑到您的数据与时间戳数组相关,将它们添加到绘图中

import matplotlib.pyplot as plt
import numpy as np
import datetime

OX_ticks_name = [datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d %H:%M:%S') for x in arrayTmstmp]
OX_ticks_pos = np.arange(0,len(arrayTmstmp))

fig, ax = plt.subplots(figsize=(16, 9), dpi=100)
...
ax.set_xticks(OX_ticks_pos)
ax.set_xticklabels(OX_ticks_name, rotation=40, horizontalalignment='right', fontsize=10)
plt.tight_layout()
plt.show()

当然,每个刻度的位置和每个刻度的名称都可以随意配置。

【讨论】:

    猜你喜欢
    • 2019-05-14
    • 2019-12-14
    • 1970-01-01
    • 2021-12-29
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    相关资源
    最近更新 更多