seaborn 热图轴中的日期
Date in seaborn heatmap axis
我正在绘制一个与病例数、年龄范围和日期相关的热图。但是我无法将 x 轴标签减少到 %d-%b(例如 15-Dec)。我怎样才能改变这个?我的数据在 Pastebin 中。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df_general = pd.read_csv('df_general.csv')
df_general['Date'] = pd.to_datetime(df_general['Date'])
fig = plt.figure(figsize = (15,5))
y_axis_labels = ['0 to 1', '1 to 9', '10 to 19', '20 to 29', '30 to 39',
'40 to 49', '50 to 59', '60 to 69', '70 to 79', '80 to 89',
'> 90']
covid_matrix = df_general.pivot('FAIXA_ETARIA', 'Date', 'count')
sns.heatmap(covid_matrix, xticklabels = 30, yticklabels = y_axis_labels, cmap='coolwarm')
#x-axis ticklabels between 30 dates
当我定义一个带有特定标签的列表时,添加 m e 替换 xticklabels 值,图表变得更糟:
m = ('01-Jan', '01-Fev', '01-Mar', '01-Apr', '01-May', '01-Jun', '01-Jul', '01-Ago', '01-Sep', '01-Oct', '01-Nov', '01-Dec')
sns.heatmap(covid_matrix, xticklabels = m, yticklabels = y_axis_labels, cmap='coolwarm')
#x-axis ticklabels with m value
您不能简单地将 x-axis 格式化为日期,因为 heatmap
只会显示您的 covid_matrix
中的那些日期;缺少日期的热图中不会有间隙(例如 2020-13-01 和 2020-02-02 之间的日期)。
最简单的方法是从用于 x 轴的格式化程序字典中获取所选刻度位置的值(在您的示例中每 30 列)并根据需要重新格式化它们:
ax = sns.heatmap(covid_matrix, xticklabels = 30, yticklabels = y_axis_labels, cmap='coolwarm')
ax.xaxis.set_ticklabels([pd.to_datetime(value).strftime('%d-%b') for value in ax.xaxis.get_major_formatter().func.args[0].values()])
或者为所选列获取列 header 值(floor 到 int,因为热图中的标签位于 之间 列值的位置):
ax.xaxis.set_ticklabels([d.strftime('%d-%b') for d in covid_matrix.columns[ax.get_xticks().astype(int)]])
我正在绘制一个与病例数、年龄范围和日期相关的热图。但是我无法将 x 轴标签减少到 %d-%b(例如 15-Dec)。我怎样才能改变这个?我的数据在 Pastebin 中。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
df_general = pd.read_csv('df_general.csv')
df_general['Date'] = pd.to_datetime(df_general['Date'])
fig = plt.figure(figsize = (15,5))
y_axis_labels = ['0 to 1', '1 to 9', '10 to 19', '20 to 29', '30 to 39',
'40 to 49', '50 to 59', '60 to 69', '70 to 79', '80 to 89',
'> 90']
covid_matrix = df_general.pivot('FAIXA_ETARIA', 'Date', 'count')
sns.heatmap(covid_matrix, xticklabels = 30, yticklabels = y_axis_labels, cmap='coolwarm')
#x-axis ticklabels between 30 dates
当我定义一个带有特定标签的列表时,添加 m e 替换 xticklabels 值,图表变得更糟:
m = ('01-Jan', '01-Fev', '01-Mar', '01-Apr', '01-May', '01-Jun', '01-Jul', '01-Ago', '01-Sep', '01-Oct', '01-Nov', '01-Dec')
sns.heatmap(covid_matrix, xticklabels = m, yticklabels = y_axis_labels, cmap='coolwarm')
#x-axis ticklabels with m value
您不能简单地将 x-axis 格式化为日期,因为 heatmap
只会显示您的 covid_matrix
中的那些日期;缺少日期的热图中不会有间隙(例如 2020-13-01 和 2020-02-02 之间的日期)。
最简单的方法是从用于 x 轴的格式化程序字典中获取所选刻度位置的值(在您的示例中每 30 列)并根据需要重新格式化它们:
ax = sns.heatmap(covid_matrix, xticklabels = 30, yticklabels = y_axis_labels, cmap='coolwarm')
ax.xaxis.set_ticklabels([pd.to_datetime(value).strftime('%d-%b') for value in ax.xaxis.get_major_formatter().func.args[0].values()])
或者为所选列获取列 header 值(floor 到 int,因为热图中的标签位于 之间 列值的位置):
ax.xaxis.set_ticklabels([d.strftime('%d-%b') for d in covid_matrix.columns[ax.get_xticks().astype(int)]])