python--proplot的一些使用方法记录,主要是绘图部分

整理记录一下使用proplot进行绘图过程的一些小技巧

1、创建画板,非投影转换

f, axs = pplt.subplots( ncols=1, nrows=1, 
                       yreverse=True,
                       share =1,
                       figsize=(8,6)
                       )
创建一个1x1的子图
ncols代表列
nrows代表行
yreverse=True 表示翻转y轴,与matplotlib.pyplot中的ax.invert_yaxis()作用相同
share=1,2,3,4,False  表示共享横轴、纵轴、colorbar、标题等信息,False表示不共享
figsize :设置画板的大小,可以根据需要设置,不添加的话是系统默认的格式

2、创建画板,含投影

f, ax = pplt.subplots( ncols=1, nrows=1, 
                        axwidth=5,
                        refwidth=2,
                        suptitle='subplot ',
                       # figsize=(5,4),
                       proj='cyl',
                       proj_kw={'lon_0': 180}, lonlim=(100, 200), 
                             latlim=(-20, 20),
                       share=4,
                       )
与matplotlib.pyplot的创建方式的区别,投影可以直接在创建画板时设置。
axwidth :调节画板的清晰度,可能,没怎么用过
refwidth: 各子图的长宽比
suptitle:各子图的总标题
 proj='cyl', 设置为等间距投影
 proj_kw={'lon_0': 180}, lonlim=(100, 200), 
                             latlim=(-20, 20),
                             表示设置中心经度为180°,地图的经度范围是:100E-200E,
                             纬度范围是:-20S-20N

3、填色图的命令

m=ax.contourf(lon,lat,pre,
            colorbar='l',
            cmap = cmap,
            extend='both',
            colors=[ 'blue9','blue6','blue4', 'blue2','blue0',
                        'white','white',
                        'yellow3','yellow6', 'orange7', 'red8','red9'
                        ],
             colorbar_kw={'label': '',
                             'lw':0.5},
            levels = np.linspace(-30,30,31)
            )
基本的命令和matplot.pyplot类似,多了一些额外的功能
colorbar='l' :设置colorbar的显示位置,可以直接在contourf()里面设置了
extend='both':设置色标两边的范围为延申形式,没有定死
lw=0.7  :如果是绘制等值线的话,可以控制线的粗细
colors=[ 'blue9','blue6','blue4', 'blue2','blue0',
                        'white','white',
                        'yellow3','yellow6', 'orange7', 'red8','red9'
                        ],   可以自己构建cmap,用colors就不需要使用cmap了
 colorbar_kw={'label': '',
                             'lw':0.5},  设置colorbar的label以及线的宽度

4、带有投影的基本细节属性

ax.format(     title='TD-type disturbance structure ',
                titleloc='l',
                rtitle='Level:850(hPa)',
            
                xformatter=LongitudeFormatter(),
                xlim=(100,200),
                xlabel='lon',
                coast=True, 
                    labels=True,
                grid=True,
              gridlinewidth=0.5,gridalpha=0.2,
              lonlines=20,
              latlines=10,
              rc_kw={'tick.pad': 8}
                )
 title='TD-type disturbance structure ', 设置图的标题,标题的位置
 titleloc='l',
rtitle='Level:850(hPa)', :设置图右边的标题,
ltitle='850(hPa)'  :  左边的标题同理
xformatter=LongitudeFormatter(), :设置x轴的ticklabel为经度的形式
xlim=(100,200),   设置x轴经度显示的范围
xlabel='lon',     设置x轴的标签,为:lon
coast=True,    打开海岸线
labels=True,   打开x轴和y轴的刻度
grid=True,     打开网格线
gridlinewidth=0.5, 设置网格线的宽度
gridalpha=0.2,     设置网格线的透明度
lonlines=20,       设置经度的显示间距
latlines=10,       设置纬度的显示间距
rc_kw={'tick.pad': 8}  设置ticklabel距离tick的间距,但是在投影的图里好像不起作用

5、没有投影的基本细节属性,普通绘图的基本属性

axs.format(     title='V(m/s) ',
                titleloc='l',
                rtitle='Level:950-200(hPa)',
                xformatter=LongitudeFormatter(),
                xlim=(100,210),
                xlabel='',
                yticks=pplt.arange(0,40,1),
                grid=True,
                xticks=10,  ## x 间隔
                  xtickminor=True, xgridminor=True,
                  ytickminor=False, ygridminor=True,
                  rc_kw={'geogrid.alpha':0.3},
                  xticks=pplt.arange(0,40,4),
                  fontsize=20,  
                  xlocator=1, xminorlocator=0.5,
                  xrotation=20,
                   yticks=[950, 800,600,500,400,300, 200],
        yscale='symlog',
)

与带投影的起始差不了太多,主要就是关于经纬度坐标的设置有些差别
xticks=10,  ## 设置x轴ticklabel的间隔
xtickminor=True, xgridminor=True,  打开x轴的ticklabel的最小值,以及网格线的最小值
ytickminor=False, ygridminor=True,  这个是设置y轴的
rc_kw={'geogrid.alpha':0.3}  设置网格线的透明度
xticks=pplt.arange(0,40,4),  设置x轴tick的具体范围
fontsize=20,    字体的大小   
 xrotation=20,     xticklabel的旋转的角度
  yticks=[]     设置yticks的具体显示数值
  yscale='symlog',   设置y轴的缩放形式,一般画垂向分布的时候用

6、绘制普通折线图plot

ax.plot(x,y,label='dpdy',legend='ur')

label='dpdy',  设置y轴的坐标
legend='ur'    设置图例在右上方,在绘图的时候可以直接设置,

7、一些其他小技巧

ax.axvline(x=18, color='grey', linewidth=1.5,linestyle='-.')  
绘制一条垂直线, 颜色为灰色,lw表示线的宽度,ls为线的风格
ax.axhline(y=0, color='grey', linewidth=1.5,linestyle='--') 
绘制一条水平线,
ox = ax.alty(color='blue8', linewidth=1)
lns2=ox.plot(x,dm2,color='blue8',
              label=r'$-V \cdot \nabla P$')
共用x轴,绘制一条折线
ox2 = ax.twinx( yloc=('axes', 1.05),  color='green4', linewidth=1)
lns3=ox2.plot(x,dm3*10**11,color='green4', 
              label=r'$-\omega \frac{\partial P}{\partial p}$',)
还是共享x轴绘制一条折线,但是这个y轴不在图上
lns = lns1+lns2+lns3+lns4
labs = [l.get_label() for l in lns]
ax.legend(lns, labs,loc='ul',ncols=2, center=False, frame=True)
将共享同一条x轴的折线的y轴的图例画在同一个框内,不然就是四个不同的图例了

ax.bar(x,datay.T*10**11,
       0.2,
       cycle=['c','blue','red6'],
        label=['MRG','TD','TC'],
        edgecolor='grey',
        legend='ul',
         colorbar_kw={'frameon': False}
  color=np.where(y>0,'tomato','tab:blue'), #判断大于0的为红色,负的为蓝色
          )
将三个不同的数据的柱形图画在同一个子图上,
三个柱形图的颜色不同,名称也不同,图例的位置为左上角


ax.text(9,0.85,'MRG',bbox=True,bordercolor='w',
        borderstyle='miter', 
        bboxcolor='w', 
        bboxstyle='square', bboxalpha=0.5, )
在图上添加text ,设置边缘颜色等

 axs[i,j].scatter(lon_center[i,j],875,marker='v',
                         markersize=150,
                         c='red9',
                         alpha=0.8,
                         zorder=2)
  绘制散度图的一些命令


ax.format()
可以用来设置全局的坐标属性等,如果存在子图的画,也可以指定某个子图设置属性
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值