爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5783|回复: 7

python里面的colorbar

[复制链接]

新浪微博达人勋

发表于 2019-10-30 21:43:55 | 显示全部楼层 |阅读模式
Python
系统平台: python
问题截图:
问题概况: 想问下大家,这个colorbar怎么能变得平滑一些呢?我是用的cartopy绘图的,我看网上有利用basemap绘图的,绘制出来的colorbar就很好看,那如果用cartopy应该怎么弄呢?
我看过提问的智慧: 看过
自己思考时长(天): 2

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

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

x

"""
这是我的代码
#处理ICOADS数据
import scipy.io as sio
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs#引进cartopy这个绘图包
from cartopy.util import add_cyclic_point# add_cyclic_point是建立循环的
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter


#load数据
data=sio.loadmat('F:\python_study\sj\data1013')
print data.keys()
percentage_djf=data['percentage_djf']*100
percentage_jja=data['percentage_jja']*100
x=data['x']
y=data['y']


c_x,c_y=np.meshgrid(x,y)
tansform_djf=percentage_djf.transpose()
#print tansform_djf
#cycle_djf,cycle_lon=add_cyclic_point(percentage_djf,coo
#取出来的x.y不能直接使用,而是应该网格化


#绘图
fig1=plt.figure(figsize=(14,6))
ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))


cont=ax.contourf(c_x,c_y,tansform_djf,transform=ccrs.PlateCarree(),cmap='jet')
box=[0,360,-90,90]#设置绘图的经纬度
ax.set_extent(box,crs=ccrs.PlateCarree())
ax.coastlines(linewidth=1.5,resolution='110m')


#设置坐标抽,并且转化成相应东西经纬度
projection = ccrs.PlateCarree()
#ax.set_xticks(np.linspace(-180, 180, 5), crs=projection)   
#ax.set_yticks(np.linspace(-90, 90,5), crs=projection)
ax.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree())
ax.set_yticks([-90,-60,-30, 0, 30, 60, 90], crs=ccrs.PlateCarree())
'''zero_direction_label=True 有度的标识,False则去掉'''
lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)#设置度




#需要填充陆地颜色时使用
#ax.add_feature(cfeature.LAND, facecolor='0.75') #默认为110m,其它分辨率需用下面命令
scale='110m'
land = cfeature.NaturalEarthFeature('physical', 'land', scale,edgecolor='face',
facecolor=cfeature.COLORS['land'])
ax.add_feature(land, facecolor='0.75')
#改变ax.add_feature和ax.coastlines的先后使用顺序可实现边界线的显示或完全填充覆盖
ax.coastlines(scale)


#设置colorbar
cb=fig1.colorbar(cont)
norm = plt.colors.Normalize(vmin=160, vmax=300)
'''cb.ax.ticks(range(minval-1,maxval,40))
cb.ax_ticklabels(range(minval-1,maxval,40))'''
#cb.ax.tick_params(direction='in')


#plt.savefig('F:\python_study\picture\fog_frenqutly_djf')
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-10-31 15:39:19 | 显示全部楼层
和cartopy没关系啊,这是matplotlib的contour的设置,你想多一点就设置 levels;
contour(xi, yi, zi, levels=14, linewidths=0.5, colors='k') 参考 https://matplotlib.org/gallery/i ... rregulardatagrid-py
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-31 16:13:23 | 显示全部楼层
葫芦爷儿 发表于 2019-10-31 15:39
和cartopy没关系啊,这是matplotlib的contour的设置,你想多一点就设置 levels;
contour(xi, yi, zi, lev ...

谢谢大神,可是为啥我在设置levels后报错了呢?直接在contourf(x,y,z,levels=)里面加了levels
上面错误提示F:\python_study\picture\QQ图片20191031160916.png
应该意思是它自身的level小于2吧,
但是我看例子里面设置levels=14后colorbar就被分成了14等份
我是哪里错了吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-31 16:16:38 | 显示全部楼层
葫芦爷儿 发表于 2019-10-31 15:39
和cartopy没关系啊,这是matplotlib的contour的设置,你想多一点就设置 levels;
contour(xi, yi, zi, lev ...

错误提示为:  if self.filled and len(self.levels) < 2:

TypeError: len() of unsized object
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-31 16:22:40 | 显示全部楼层
葫芦爷儿 发表于 2019-10-31 15:39
和cartopy没关系啊,这是matplotlib的contour的设置,你想多一点就设置 levels;
contour(xi, yi, zi, lev ...

错误提示为:  if self.filled and len(self.levels) < 2:

TypeError: len() of unsized object
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-10-31 16:50:03 | 显示全部楼层
contourf(x,y,z,18)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-31 17:08:46 | 显示全部楼层

恩恩!谢谢可以啦~~真开心
我还找到了一个方法,就是可以把想要设置的数字放到一个[]里面
比如:a=[0,2,4,6,8]
然后在contourf(x,y,z,a)也可以~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-10-31 17:12:40 | 显示全部楼层

恩恩!谢谢可以啦~~真开心
我还找到了一个方法,就是可以把想要设置的数字放到一个[]里面
比如:a=[0,2,4,6,8]
然后在contourf(x,y,z,a)也可以~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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