请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6672|回复: 8

matplotlib的Y轴刻度如何设置为从原点开始?

[复制链接]

新浪微博达人勋

发表于 2021-1-8 18:51:39 | 显示全部楼层 |阅读模式
GrADS
系统平台:
问题截图: -
问题概况: 使用matplotlib绘图,Y轴的刻度总是跑到原点上面去,使用ylim参数也有部分图片不起作用。
我看过提问的智慧: 看过
自己思考时长(天): 1

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 里斯斯里 于 2021-1-8 18:52 编辑

地面温度(日变化).png
如上图所示,y轴的第一个刻度就是不呆在原点(x轴上),由于是批量出图,没法设置多个变量的Y轴显示范围。

自己也设定了ylim参数中的底部值(见第70行代码),但还是有这个问题!!!头疼。
捕获.PNG
请问有什么好的参数或者办法可以把Y轴第一个刻度设置到X轴上吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-1-8 22:28:20 | 显示全部楼层
ylim,就是y轴的limit范围。也就是20~30,还是-30~30,只是显示/绘制的范围不一样而已。
你要的可以试试
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-9 15:49:14 | 显示全部楼层
edwardli 发表于 2021-1-8 22:28
ylim,就是y轴的limit范围。也就是20~30,还是-30~30,只是显示/绘制的范围不一样而已。
你要的可以试试

没想到被大佬翻了牌子
估计是我开始没描述清楚问题,我已经用set_ylim参数(好像和plt.ylim差不多一个东西吧)来设置了y轴的开始范围,在第二张图里的第70行代码(int(min(values)))来向下取整设置了,比如在第一张图里应该就是set_lim(bottom=12,top=None),在图1中差不多也是从12开始的,但是第一个标签值却是12.5,这个就很头疼。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-10 04:21:59 | 显示全部楼层
本帖最后由 edwardli 于 2021-1-10 04:36 编辑

0、使用plt接口的话就是plt.ylim,使用axes实例的方法基本都是ax.set_ylim。这里“ylim”可以替换为其他属性、方法,绝大多数plt.*等效于ax.set_*。唯一注意是plt是针对当前画布的当前绘图区(与声明顺序、或者sca()等绘图区切换语句有关)!ax则是指名道姓的对某个绘图区进行操作,只要之前声明了,可以在后续任何位置(只要不觉着乱)调用。     PS. plt有的时候也会是figure实例的方便接口。  

关于坐标轴“刻度”:
1、ylim是范围limit,使用后,Y轴就是从向下取整的12开始的,但是matplotlib会自动设置刻度值ticks刻度标签ticklabels  
2、主动设置刻度值是plt.yticks(np.arange(12, 40, 1)) ,即在那些位置显示刻度值。比如太密了也可以(12,40,4)  
3、紧接着“刻度线”(上学时画轴线及箭头之后,标注数字位置的短线)可以定制ax.tick_params(),朝内朝外、主major刻度附minor刻度、刻度线宽、刻度线长、刻度线颜色…也可以控制下面的“刻度标签的颜色、字体大小…  
4、还可以主动定制刻度标签ax.set_yticklabels(),让对应刻度显示其他字符串,比如['a','b','c']。  
5、刻度标签的格式(小数位数、字体、颜色、旋转…)也可以被定制plt.ticklabel_format()  

以上是关于坐标轴“刻度”的所有。本例中  刻度 = 刻度值(位置)  + 刻度线  +刻度标签  + 格式
下图可以帮助梳理这几个“名词”之间的关系↓
QQ图片20210110042529.jpg
QQ图片20210110043435.jpg
FA2F59BC-4591-4233-8BDA-34205FA21F2C.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-10 04:49:12 | 显示全部楼层
本帖最后由 edwardli 于 2021-1-10 04:52 编辑
里斯斯里 发表于 2021-1-9 15:49
没想到被大佬翻了牌子
估计是我开始没描述清楚问题,我已经用set_ylim参数(好像和plt.ylim差 ...

ylim,就是y轴的limit范围。也就是20~30,还是-30~30,只是显示/绘制的范围不一样而已。 你要的可以试试 ax.spines['bottom'].set_position(('data',0)) 动x轴(底部脊线)的位置。
这关键的后半句,被手机操作耽搁了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-10 21:27:57 | 显示全部楼层
edwardli 发表于 2021-1-10 04:21
0、使用plt接口的话就是plt.ylim,使用axes实例的方法基本都是ax.set_ylim。这里“ylim”可以替换为其他属 ...

感谢大佬的细心传授,感觉又学到新东西了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-10 21:33:16 | 显示全部楼层
edwardli 发表于 2021-1-10 04:49
ylim,就是y轴的limit范围。也就是20~30,还是-30~30,只是显示/绘制的范围不一样而已。 你要的可以试 ...

这一句我之前试过,会把x轴直接变没了,所以就没继续试了。
本来之前的想法是自己写一个自动适应的Y轴ticks的,变量的范围有0.x,1.x,10.x以及800.x这些量级的,就是自动识别最小最大值,并返回合适的最低最高标签值以及间隔值的,但是由于手边的活比较多,没来得及继续弄了,现在暂时打算手动设置tikcs标签再用if调用了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-11 08:15:07 | 显示全部楼层
里斯斯里 发表于 2021-1-10 21:33
这一句我之前试过,会把x轴直接变没了,所以就没继续试了。
本来之前的想法是自己写一个自动适应的Y轴ti ...

如果每张图之间的量级差异很大,可以考虑用距平,或者直接除以一个中位数\最大值变成“百分比”,顶算是“标准化”、“均一化”了。对于分析变化趋势没有影响。需要分析个别过程的时候再去绘制某个、某几个时次的绝对值的曲线。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-1-11 08:59:52 | 显示全部楼层
edwardli 发表于 2021-1-11 08:15
如果每张图之间的量级差异很大,可以考虑用距平,或者直接除以一个中位数\最大值变成“百分比”,顶算是 ...

好的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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