示例#1
0
    def vertical_plane(self,**kwargs):

        field_array=None
        for key,value in kwargs.iteritems():
            if key == 'field':
                isWind=False            
                field_array=value
            if key == 'spd':
                isWind=True
                windname=value
            elif key == 'sliceo':
                self.sliceo=value

        u_array=self.u_array
        v_array=self.v_array
        w_array=self.w_array

        self.slice_type='vertical'
        self.set_panel(option=self.slice_type,wind=isWind)        

        figsize=self.figure_size['vertical']
        fig = plt.figure(figsize=figsize)

        plot_grids=ImageGrid( fig,111,
                                nrows_ncols = self.rows_cols,
                                axes_pad = 0.0,
                                add_all = True,
                                share_all=False,
                                label_mode = "L",
                                cbar_location = "top",
                                cbar_mode="single",
                                aspect=True)

        """ get list with slices """
        uComp  = self.get_slices(u_array)
        vComp  = self.get_slices(v_array)
        wComp  = self.get_slices(w_array)
        profiles = Terrain.get_altitude_profile(self)

        if isWind:
            if windname == 'u':
                field_group = uComp
                colorName='U'
                varName=colorName
            elif windname == 'v':
                field_group = vComp
                colorName='V'
                varName=colorName
            elif windname == 'w':
                field_group = wComp
                colorName='WVA'
                varName=colorName
        else:
            field_group = self.get_slices(field_array)
            varName=self.var

        ''' field extent '''
        extent1=self.get_extent()

        ''' if zoomOpt is false then extent1=extent2 '''            
        if self.zoomOpt:
            opt=self.zoomOpt[0]
            extent2=cm.zoom_in(self,extent1,self.zoomCenter[opt])
        else:
            extent2=extent1

        ''' scale for horizontal axis'''
        self.scale=20

        ''' adjust vertical extent '''
        if self.sliceo=='meridional':
            extent3=cm.adjust_extent(self,extent1,'meridional','data')
            extent4=cm.adjust_extent(self,extent2,'meridional','detail')
            horizontalComp=vComp
            geo_axis='Lon: '
        elif self.sliceo=='zonal':
            extent3=cm.adjust_extent(self,extent1,'zonal','data')
            extent4=cm.adjust_extent(self,extent2,'zonal','detail')            
            horizontalComp=uComp
            geo_axis='Lat: '


        """creates iterator group """
        group=zip(plot_grids,
                    field_group,
                    horizontalComp,
                    wComp,
                    profiles['altitude'],profiles['axis'])

        """make gridded plot """
        p=0
        for g,field,h_comp,w_comp,prof,profax in group:

            if isWind:
                im, cmap, norm = self.add_field(g,
                                                array=field.T,                                                
                                                field=varName,
                                                name=colorName,
                                                ext=extent3)
            else:
                im, cmap, norm = self.add_field(g,
                                                array=field.T,
                                                field=varName,
                                                name=self.var,
                                                ext=extent3)

            self.add_terrain_profile(g,prof,profax)

            if self.wind and not isWind:
                self.add_windvector(g,h_comp.T,w_comp.T)

            self.add_slice_line(g)

            g.set_xlim(extent4[0], extent4[1])
            g.set_ylim(extent4[2], extent4[3])    

            if p == 0:
                self.match_horizontal_grid(g)

            self.adjust_ticklabels(g)

            if self.verticalGridMajorOn:
                g.grid(True, which = 'major',linewidth=1)

            if self.verticalGridMinorOn:
                g.grid(True, which = 'minor',alpha=0.5)
                g.minorticks_on()

            if self.sliceo=='meridional':
                geotext=geo_axis+str(self.slicem[p])
            elif self.sliceo=='zonal':
                geotext=geo_axis+str(self.slicez[p])

            g.text(    0.03, 0.9,
                    geotext,
                    fontsize=self.zlevel_textsize,
                    horizontalalignment='left',
                    verticalalignment='center',
                    transform=g.transAxes)
            p+=1

        # add color bar
        plot_grids.cbar_axes[0].colorbar(im,cmap=cmap, norm=norm)

        # add title
        titext='Dual-Doppler Synthesis: '+ self.get_var_title(varName)+'\n'
        line_start='\nStart time: '+self.synth_start.strftime('%Y-%m-%d %H:%M')+' UTC'
        line_end='\nEnd time: '+self.synth_end.strftime('%Y-%m-%d %H:%M')+' UTC'        
        fig.suptitle(titext+self.file+line_start+line_end)

        # show figure
        plt.draw()
示例#2
0
    def horizontal_plane(self , **kwargs):

        field_array=kwargs['field']
        u_array=self.u_array
        v_array=self.v_array
        w_array=self.w_array

        if self.mask:
            field_array.mask=w_array.mask
            u_array.mask=w_array.mask
            v_array.mask=w_array.mask

        if self.panel:
            self.set_panel(option='single')
            figsize=self.figure_size['single']
        else:
            self.set_panel(option='multi')
            figsize=self.figure_size['multi']

        self.slice_type='horizontal'

        with sns.axes_style("white"):
            fig = plt.figure(figsize=figsize)
            plot_grids=ImageGrid( fig,111,
                                    nrows_ncols = self.rows_cols,
                                    axes_pad = 0.0,
                                    add_all = True,
                                    share_all=False,
                                    label_mode = "L",
                                    cbar_location = "top",
                                    cbar_mode="single")
    
        ''' field extent '''
        extent1=self.get_extent()

        ''' if zoomOpt is false then extent1=extent2 '''            
        if self.zoomOpt:
            opt=self.zoomOpt[0]
            extent2=cm.zoom_in(self,extent1,self.zoomCenter[opt])
        else:
            extent2=extent1


        ''' make slices '''
        field_group = self.get_slices(field_array)
        ucomp = self.get_slices(u_array)
        vcomp = self.get_slices(v_array)        

        ''' creates iterator group '''
        group=zip(plot_grids,self.zlevels,field_group,ucomp,vcomp)
        gn=0
        
        ''' make gridded plot '''
        for g,k,field,u,v in group:

            self.add_coastline(g)
            self.add_flight_path2(g)

            im, cmap, norm = self.add_field2(g,
                                            array=field.T,
                                            field=self.var)

            if self.terrain.file:
                Terrain.add_contour(g,k,self)

            if self.wind:
                self.add_windvector(g,u.T,v.T,gn)

            if self.slice:
                self.add_slice_line(g,gn)

            if self.markersLocations:
                self.add_location_markers(g, gn)

            g.set_xlim(extent2[0], extent2[1])
            g.set_ylim(extent2[2], extent2[3])                

            if gn == 0:
                legname = os.path.basename(self.file)
                g.text(0.02,0.15, legname[:3].upper() + " " + legname[3:5],
                       horizontalalignment='left',
                       transform = g.transAxes,weight='bold')

            if self.horizontalGridMajorOn:
                g.grid(True, which = 'major',linewidth=1)

            if self.horizontalGridMinorOn:
                g.grid(True, which = 'minor',alpha=0.5)
                g.minorticks_on()

            ztext=str(k)+'km MSL'
            g.text(    0.02, 0.03,
                    ztext,
                    fontsize=self.zlevel_textsize,
                    horizontalalignment='left',
                    verticalalignment='center',
                    transform=g.transAxes)

            self.horizontal['ymajor'] = g.get_yticks(minor=False)
            self.horizontal['yminor'] = g.get_yticks(minor=True)
            self.horizontal['xmajor'] = g.get_xticks(minor=False)
            self.horizontal['xminor'] = g.get_xticks(minor=True)            
            gn+=1

        ''' add color bar '''
        plot_grids.cbar_axes[0].colorbar(im,cmap=cmap, norm=norm)

        ''' add title '''
        st=self.synth_start
        en=self.synth_end
        t1='Dual-Doppler Synthesis: '+ self.get_var_title(self.var) +'\n'
        t2='Date: '+st.strftime('%Y-%m-%d') + '\n'
        t3= 'Time: '+st.strftime('%H:%M')+'-'+en.strftime('%H:%M UTC') + '\n'        
        # fig.suptitle(t1+t2+t3+self.file)
        fig.suptitle(t1+t2+t3)

        plt.draw()
        self.haxis=g