爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 17209|回复: 2

[源代码] 解决python画图中colorbar设置刻度和标签字体大小

[复制链接]

新浪微博达人勋

发表于 2019-4-22 14:54:24 | 显示全部楼层 |阅读模式

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

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

x
https://blog.csdn.net/weixin_43718675/article/details/89451587
1. 介绍
python很火,因为有各种库的支持,所以功能格外强大。在可视化方面,目前用得较多的是matplotlib.
在基于matplotlib.pyplot画带色标(colorbar)的图时候,往往为了美观和科研用途,需要对colorbar的Ticks(刻度) ,标签(label)和fonddict(字体进行设置)。但是很多初学者都苦于这些东西的设置,因为太麻烦了(别问我怎么知道的)。以下将介绍有用的方法来解决这些问题。


2. 解决问题

下面将分两种情况来进行介绍

***情况1:当colorbar在需要额外指定时(即不能自动生成)。***
这种情况最为常见。如 plt.contourf  ,plt.imshow, 等。即就是先基于plt.contourf生成图后,再获取该图的句柄,再设置colorbar。画主图和colorbar是两个语句。
还是举个例子吧
- List item

```
import numpy as np
import matplotlib.pyplot as plt
#设置一个随机种子,
#生成固定数值的随机整数数组
seed=np.random.seed(42)
data=np.random.randint(0,10,size=(10,10))

fig=plt.figure(figsize=(10,8))
#这就是所谓的第一种情况哦
h=plt.contourf(data)
cb=plt.colorbar(h)
```
生成的图如下所示


                               
登录/注册后可看大图


我们设置一下主图的横纵坐标的刻度字体大小
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)



                               
登录/注册后可看大图


看,在这种情况下,色标的刻度大小与主图的刻度大小不符合,这是完全不符合一个合格的程序员的审美的。因此需要更改colorbar刻度字体大小。

fig=plt.figure(figsize=(10,8))
#这就是所谓的第一种情况哦
h=plt.contourf(data)
cb=plt.colorbar(h)
cb.ax.tick_params(labelsize=16)  #设置色标刻度字体大小。
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)
font = {'family' : 'serif',
        'color'  : 'darkred',
        'weight' : 'normal',
        'size'   : 16,
        }
cb.set_label('colorbar',fontdict=font) #设置colorbar的标签字体及其大小



                               
登录/注册后可看大图

这个图是不是漂亮多啦


当你想改变colorbar刻度数值大小时,可以采用cb.set_ticks, cb.set_ticklabels
当然你也可以获取其刻度大小,可以用cb.get_ticks。还有cb.get_cmap可以获取颜色属性。


当你需要进行其他操作,如设置颜色,大小限制什么的,可以自己随意上手。



                               
登录/注册后可看大图


综上,最重要的一句是  **cb.ax.tick_params(labelsize=16)**。其他的属性也可以 用 cb.ax.+table键进行查看。

***情况2:当colorbar可以在生成主图时就自动生成时***
这种情况在生成热图时较为常见。
可以用seaborn来生成热图(heatmap)

```
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
seed=np.random.seed(42)
data=np.random.randint(0,10,size=(10,10))

fig=plt.figure(figsize=(10,8))
h=sns.heatmap(data, annot=True,fmt='d',linewidths=0.5)  
```
生成图如下:



                               
登录/注册后可看大图

heatmap的各个参数介绍可见如下链接:
http://seaborn.pydata.org/generated/seaborn.heatmap.html
https://blog.csdn.net/sunchengquan/article/details/78573244
https://blog.csdn.net/m0_38103546/article/details/79935671
heatmap参数中,默认cbar=True,即默认画出colorbar,其中cbarkws为一个字典, 可以用来设置colorbar的一些属性,包括 thrink, orentation等 。但是我没有找到cbrkws可以设置哪些属性以及怎么设置。
因此这里不利用cbrkws进行colorbar设置。



                               
登录/注册后可看大图


fig=plt.figure(figsize=(10,8))   
h=sns.heatmap(data, annot=True,fmt='d',linewidths=0.5,cbar=False) #设置不使用其默认自带的colorbar
cb=h.figure.colorbar(h.collections[0]) #显示colorbar
cb.ax.tick_params(labelsize=16) #设置colorbar刻度字体大小。
plt.xticks(fontsize=16)
plt.yticks(fontsize=16)


                               
登录/注册后可看大图


其他如标签和刻度范围和色标的操作同第一种情况。

参考链接:
https://blog.csdn.net/henkekao/article/details/72864564
https://stackoverflow.com/questi ... ize-of-the-colorbar
https://stackoverflow.com/questi ... label-as-percentage



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-9-21 09:31:19 | 显示全部楼层
好东西,的确不错!!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-1-13 19:22:31 | 显示全部楼层
多谢楼主分享!!解决问题啦
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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