如何调整Seaborn X轴的日期格式?我通常使用
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
但这会引发错误
ValueError: DateFormatter found a value of x=0, which is an illegal date
尽管日期数据已正确格式化为dtype ='datetime64 [ns]'并且没有0值。
图表创建者
data = data.melt('Name', var_name='country', value_name='cpi')
data.set_index('Name',inplace=True)
fig, ax = plt.subplots(figsize=(10, 6), dpi=80)
ax = sns.barplot(x=data.index, y='cpi', hue='country', data=data, ax=ax)
fig.autofmt_xdate()
这是日期轴数据的样子:
data.index
Out[286]:
DatetimeIndex(['2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31',
'2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31',
'2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31',
'2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31',
'2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31',
'2019-04-30', '2019-05-31', '2019-06-30', '2019-07-31',
'2019-08-31', '2019-09-30', '2019-10-31', '2019-11-30',
'2019-12-31', '2020-01-31', '2020-02-29', '2020-03-31'],
dtype='datetime64[ns]', name='Name', freq=None)
答案 0 :(得分:1)
与此同时,我通过以下调整找到了可行的解决方案
ax.set_xticklabels([datetime.strptime(t.get_text(), '%Y-%m-%dT%H:%M:%S.%f000').strftime('%b %Y') for t in ax.get_xticklabels()])
我认为这不是很漂亮,因此,如果您还有其他处理Python的方法,请告诉我。
答案 1 :(得分:1)
您的解决方案似乎还不错;我投票了。
如果您想减少一些冗长的操作,可以这样做:
x_dates = data.index.strftime('%b %Y').sort_values().unique()
ax.set_xticklabels(labels=x_dates, rotation=45, ha='right')
使用此方法,您不需要进行fig.autofmt_xdate()
调用。