为了账号安全,请及时绑定邮箱和手机立即绑定

Seaborn 热图上 y 轴刻度的垂直对齐

Seaborn 热图上 y 轴刻度的垂直对齐

温温酱 2021-08-17 16:14:59
我正在绘制 aSeaborn heatmap并且我想将y-axis刻度标签居中,但找不到方法来做到这一点。'va'text 属性似乎在 上不可用yticks()。考虑下图我想将一周中的几天与一排方块的中心对齐生成此图的代码:import pandas as pdimport seaborn as snsimport numpy as npimport matplotlib.pyplot as plt#Generate dummy datastartDate = '2017-11-25'dateList = pd.date_range(startDate, periods=365).tolist()df = pd.DataFrame({'Date': dateList,                'Distance': np.random.normal(loc=15, scale=15, size=(365,))              })#set week and daydf['Week'] = [x.isocalendar()[1] for x in df['Date']]df['Day'] = [x.isocalendar()[2] for x in df['Date']]#create dataset for heatmap#group by axis to plotdf = df.groupby(['Week','Day']).sum().reset_index()#restructure for heatmapdata = df.pivot("Day","Week","Distance")#configure the heatmap plotsns.set()fig, ax = plt.subplots(figsize=(15,6))ax=sns.heatmap(data,xticklabels=1,ax = ax, robust=True, square=True,cmap='RdBu_r',cbar_kws={"shrink":.3, "label": "Distance (KM)"})ax.set_title('Running distance', fontsize=16, fontdict={})#configure the x and y ticksplt.xticks(fontsize="9")plt.yticks(np.arange(7),('Mon','Tue','Wed','Thu','Fri','Sat','Sun'), rotation=0, fontsize="10", va="center")#set labelsize of the colorbarcbar = ax.collections[0].colorbarcbar.ax.tick_params(labelsize=10)plt.show()
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

加入+0.5np.arange(7)plt.yticks为我工作

plt.yticks(np.arange(7)+0.5,('Mon','Tue','Wed','Thu','Fri','Sat','Sun'), rotation=0, fontsize="10", va="center")



查看完整回答
反对 回复 2021-08-17
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

onno 的解决方案适用于这种特定情况(矩阵类型的图通常在补丁中间有标签),但也可以考虑这些更通用的方法来帮助您:


a) 首先找出刻度线的位置


pos, textvals = plt.yticks()

print(pos)


>>> [0.5 1.5 2.5 3.5 4.5 5.5 6.5]

当然,您可以在更新期间直接使用这些职位:


plt.yticks(pos,('Mon','Tue','Wed','Thu','Fri','Sat','Sun'), 

    rotation=0, fontsize="10", va="center")

b) 使用基于对象的 API 只调整文本


pyplot 命令xticks并同时yticks更新位置和文本。但是轴对象对于位置 ( ax.set_yticks(pos)) 和文本 ( ax.set_yticklabels(labels))具有独立的方法。


只要您知道要生成多少标签(以及它们的顺序),您甚至不需要考虑它们的位置来更新文本。


ax.set_yticklabels(('Mon','Tue','Wed','Thu','Fri','Sat','Sun'), 

    rotation=0, fontsize="10", va="center")


查看完整回答
反对 回复 2021-08-17
?
偶然的你

TA贡献1841条经验 获得超3个赞

这是一个老问题,但我最近遇到了这个问题,发现这对我有用:


g = sns.heatmap(df)

g.set_yticklabels(labels=g.get_yticklabels(), va='center')

当然,您也可以labels=myLabelList像在 OP 中那样定义


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 397 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号