爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3395|回复: 7

[求助] python 热力图坐标轴问题

[复制链接]

新浪微博达人勋

发表于 2023-4-17 14:39:17 | 显示全部楼层 |阅读模式
66金钱
本帖最后由 signor9 于 2023-4-17 14:45 编辑

用CFS的数据,做了个预测高温的热力图。数据整理成excel后这样的:

然后用代码:

filename = 'cfs78-r.xlsx'
datas = pd.read_excel(filename,index_col=0)
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(1,1,1)
ax = sns.heatmap(datas,annot=False,fmt='.1f',cmap="gist_heat_r")

ax.set_ylabel('date',fontsize=16)
ax.set_xlabel('days',fontsize=16)
ax.set_title('CFS',fontsize=24)

plt.show()
出图的结果发现,y轴的时间标签很秘,而且后缀太长了

希望能改成“月-日”的格式,而且能间隔3个,稀疏些

纵轴是起报日,横轴是预报的未来多少天

纵轴是起报日,横轴是预报的未来多少天

Y轴的刻度太密了,而且时间的后缀太长了

Y轴的刻度太密了,而且时间的后缀太长了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2023-4-17 14:47:53 | 显示全部楼层
搜索了很多办法后,发现能把刻度变得稀疏,但是刻度标签要么顺序错误,要么就没了。
比如加上了这段
ax.yaxis.set_major_locator(mticker.MultipleLocator(4))

后,刻度是变得稀疏了,但是标签没了

刻度是变得稀疏了,但是刻度标签的日期没了

刻度是变得稀疏了,但是刻度标签的日期没了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-17 14:50:13 | 显示全部楼层
或者是加上这两段
ax.set_yticks(datas.index[::4].values)
ax.set_yticklabels(datas.index[::4].values)

图像会被压缩到最上面,而且坐标刻度全都重合到最下面了
Figure_3.png
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-17 14:54:21 | 显示全部楼层
或者是加上这两段
ax.yaxis.set_major_locator(mticker.MultipleLocator(4))
ax.set_yticklabels(datas.index[::4].values)

他会提示UserWarning: FixedFormatter should only be used together with FixedLocator

而且,y轴的刻度标签也确实错位了,最后日应该是8月31日,这里变成8月27日了

刻度是稀疏了,但是刻度标签错位了

刻度是稀疏了,但是刻度标签错位了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-17 15:11:19 | 显示全部楼层
刻度搞定了,增加了两行
yind = np.arange(1,62,4)
ax.yaxis.set_major_locator(mticker.FixedLocator(yind))
就可以按照每4个出一次刻度标签了

但是怎么只保留日期的“月-日”舍弃掉年和时,就搞不定了
Figure_5.png
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-17 15:33:41 | 显示全部楼层
直接从data的index里把日期挑出来再改成“月-日”的格式,重新写成个列表,当做y轴的标签就可以了
ymd = list(datas.index[::4].strftime('%m-%d'))
ax.set_yticklabels(ymd)
终于顺利的出了我想要的图了

y轴的刻度间隔,标签都没问题了

y轴的刻度间隔,标签都没问题了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2023-4-24 09:29:42 | 显示全部楼层
改xls文件,把A字段改为字符串格式,间隔3个就把中间2个改为空白字符串,显示出来就没有问题了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-4-24 17:35:18 | 显示全部楼层
老A 发表于 2023-4-24 09:29
改xls文件,把A字段改为字符串格式,间隔3个就把中间2个改为空白字符串,显示出来就没有问题了

这可以的啊,我怎么就没想到这个方法
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表