下面的脚本创建了一个简单的时间序列图:
%matplotlib inline
import datetime
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df = []
start_date = datetime.datetime(2015, 7, 1)
for i in range(10):
for j in [1,2]:
unit = 'Ones' if j == 1 else 'Twos'
date = start_date + datetime.timedelta(days=i)
df.append({
'Date': date.strftime('%Y%m%d'),
'Value': i * j,
'Unit': unit
})
df = pd.DataFrame(df)
sns.tsplot(df, time='Date', value='Value', unit='Unit', ax=ax)
fig.autofmt_xdate()
其结果如下:
正如您所看到的,x轴对于日期时间有奇怪的数字,而不是通常的matplotlib
和其他绘图实用程序附带的“好”表示。我试过很多方法,重新格式化数据,但结果总是不干净。有人知道怎么走吗?
这是一个潜在的不雅的解决方案,但它是唯一一个我有。。。希望有帮助!
如果你看到任何问题,请告诉我!
Matplotlib将日期表示为浮点数(以天为单位),因此,除非您(或pandas或seaborn)告诉它您的值表示日期,否则它不会将刻度设置为日期格式。我不是一个天生的专家,但是看起来它(或者熊猫)确实将
datetime
对象转换为matplotlib日期,但是没有为轴分配适当的定位器和格式化程序。这就是为什么你会得到这些奇怪的数字,事实上,它们只是0001.01.01之后的几天。因此,您必须手动处理滴答声(在大多数情况下,这是更好的,因为它给您更多的控制)。因此,您必须指定一个date locator,决定在哪里放置记号,以及一个date formatter,然后为记号标签格式化字符串。
结果:
对我来说,@hitzg的回答会导致DateFormatter深处出现“OverflowError:signed integer is greater than maximum”。
看看我的数据帧,我的索引是datetime64,而不是datetime。但是熊猫很好地转换了这些。以下对我很有用:
相关问题 更多 >
编程相关推荐