将pandas datetime64 [ns]转换为seat tsplot中日期x轴的matplotlib date-float

时间:2018-07-12 04:34:04

标签: pandas matplotlib seaborn

好吧,我正在尝试做一些琐碎的事情,但是我花了更多的时间比我想承认的那样搜索Google和堆栈溢出只会变得更沮丧。

我想做的事情:我想在一个海洋tsplot上格式化我的x轴。

我的堆栈溢出搜索告诉我的是:matplot lib具有set_major_formattter函数,但我似乎无法使用它而不会遇到溢出错误。

我正在寻找的是:将datetime64 [ns]转换为可与marplot lib的set_major_formatter一起使用的浮点数的简单方法。

我认为自己陷入困境的地方:

df.date_action = df.date_action.values.astype('float')
# converts the field to a float but matplotlib expects seconds since 0001-01-01 not nano seconds since epoch

有没有一种简单的方法可以使我丢失?

到目前为止,我评论过的最有帮助的帖子是 31255815使我到达了95%的位置,但还不是很

下面是一些示例代码来说明问题

# standard imports
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
import pandas as pd
import seaborn as sns; sns.set()

## generate fake data
from datetime import timedelta, date
import random

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(2013, 1, 1)
end_date = date(2018, 6, 2)

date_list = []
number_list = []
for single_date in daterange(start_date, end_date):
    date_list.append(single_date)
    if len(number_list) > 0:
      number_list.append(random.random() + number_list[-1])
    else:
      number_list.append(random.random())

df = pd.DataFrame(data={'date_action': date_list, 'values': number_list})
# note my actual data comes in as a datetime64[ns]
df['date_action'] = df['date_action'].astype('datetime64[ns]')
# the following looked promising but is still offset an incorrect amount
#df.date_action = df.date_action.values.astype('float')
#df.date_action = df.date_action.to_datetime

## chart stuff
plt.clf()

import matplotlib.dates as mdates
df['dummy_01'] = 0

rows = 1
cols = 1
fig, axs = plt.subplots(nrows=rows, ncols=cols, figsize=(10, 8))
ax1 = plt.subplot2grid((rows, cols), (0, 0))

for i in [ax1]: # trying to format x-axis
  pass
  i.xaxis_date()
  i.xaxis.set_major_locator(mdates.AutoDateLocator())
  i.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

sns.tsplot(df, time='date_action', unit='dummy_01',
           value='values', ax=ax1) #
plt.plot()
plt.show()

0 个答案:

没有答案