python – 在seaborn热图上显示日期
作者:互联网
我正在尝试使用seaborn库从pandas数据帧创建热图.这是代码:
test_df = pd.DataFrame(np.random.randn(367, 5),
index = pd.DatetimeIndex(start='01-01-2000', end='01-01-2001', freq='1D'))
ax = sns.heatmap(test_df.T)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%d'))
但是,我得到的数字没有在x轴上打印.
解决方法:
Seaborn热图是一个绝对的情节.它从0到列数 – 1,在这种情况下从0到366.日期时间定位器和格式化程序期望值为日期(或更准确地说,与日期对应的数字).对于有问题的年份,将是730120(= 01-01-2000)和730486(= 01-01-2001)之间的数字.
因此,为了能够使用matplotlib.dates格式化程序和定位器,您需要首先将数据帧索引转换为datetime对象.然后,您可以不使用热图,而是使用允许数字轴的图,例如一个imshow情节.然后,您可以将该imshow绘图的范围设置为与要显示的日期范围相对应.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
df = pd.DataFrame(np.random.randn(367, 5),
index = pd.DatetimeIndex(start='01-01-2000', end='01-01-2001', freq='1D'))
dates = df.index.to_pydatetime()
dnum = mdates.date2num(dates)
start = dnum[0] - (dnum[1]-dnum[0])/2.
stop = dnum[-1] + (dnum[1]-dnum[0])/2.
extent = [start, stop, -0.5, len(df.columns)-0.5]
fig, ax = plt.subplots()
im = ax.imshow(df.T.values, extent=extent, aspect="auto")
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
fig.colorbar(im)
plt.show()
标签:python,pandas,matplotlib,seaborn,dateformatter 来源: https://codeday.me/bug/20190929/1831905.html