Re: Explicit tick marks and labels not plotting when using overlay

From: Kay Shelton <kay_at_nyahnyahspammersnyahnyah>
Date: Wed Jun 23 2010 - 18:46:56 MDT

Hi Mary,

Thanks so much for your help, both with the plotting (works wonderfully!)
and with cleaning up the script, it runs much faster now I have eliminated
almost all the do loops.

For completeness, the final suggestion you had using the where function
didn't work. I could be wrong, but I think it is because I needed to sum
over all lat/lons where the value was not missing and less than zero for
each day/lev, and I was mixing the number of dimensions in parts of the
where function. Anyway, I did still manage to still get around using a do
loop here.

I replaced this code:

do days = 0,car_dims(0)-1
  do levs = 0,car_dims(1)-1

    do car_lat = 0,car_dims(2)-1
      do car_lon = 0,car_dims(3)-1

        if
((.not.(ismissing(car_dpvdyLPF(days,levs,car_lat,car_lon)))).and.(car_dpvdyLPF(days,levs,car_lat,car_lon).lt.0.))
then
          box_area(0,days,levs) = box_area(0,days,levs) +
(car_dpvdyLPF(days,levs,car_lat,car_lon)/((car_dims(2)-1)*(car_dims(3)-1)))
        end if

      end do ; car_lon
    end do ; car_lat

  end do ; levs
end do ;days

with this code:

area_car_dpvdyLPF = car_dpvdyLPF

area_car_dpvdyLPF =
where(((ismissing(car_dpvdyLPF)).or.(car_dpvdyLPF.ge.0.)),0.,area_car_dpvdyLPF)

box_area(0,:,:) =
(dim_sum_n(area_car_dpvdyLPF,(/2,3/)))/((car_dims(2)-1)*(car_dims(3)-1))

This all ends up being significantly faster. Thanks again,

Kay

On 24 June 2010 07:26, Mary Haley <haley@ucar.edu> wrote:

> BTW, I think you can get rid of some of the do loops to make your script
> run faster. Do loops will cause any scripting language to slow down, so you
> want to keep them to a minimum.
>
> For example, the code:
>
> do nl = 0,(dimsizes(pvclim&lat)-1)
> dlon = (pvclim&lon(2)-pvclim&lon(1))*0.0174533
> dx = 6378388*cos(0.0174533*pvclim&lat(nl))*dlon
> dpvdx_T(nl,:,:,:)= dpvdx_T(nl,:,:,:)/dx
> end do
>
> doesn't need to have the "dlon" calculation inside the loop, since it's the
> same every time through.
>
> I believe you can accomplish the above without a do loop. Try this:
>
> dlon = (pvclim&lon(2)-pvclim&lon(1))*0.0174533
> dx =
> conform_dims(dimsizes(dpvdx_T),6378388*cos(0.0174533*pvclim&lat)*dlon,0)
> dpvdx_T= dpvdx_T/dx
>
> I'm not entirely sure about the above. It will only work if the leftmost
> dimension of dpvdx_T is the same size as pvclim&lat.
>
> This code:
>
> do days = 0,car_dims(0)-1
> do levs = 0,car_dims(1)-1
>
> box_min(0,days,levs) = min(car_dpvdyLPF(days,levs,:,:))
> box_min(1,days,levs) = min(epac_dpvdyLPF(days,levs,:,:))
>
> end do ; levs
> end do ; days
>
>
> can be replaced by using "dim_min_n":
>
> box_min(0,days,levs) = dim_min_n(car_dpvdyLPF(days,levs,:,:),(/2,3/))
> box_min(1,days,levs) = dim_min_n(epac_dpvdyLPF(days,levs,:,:),(/2,3/))
>
> This code:
>
> do car_lat = 0,car_dims(2)-1
> do car_lon = 0,car_dims(3)-1
>
> if
> ((.not.(ismissing(car_dpvdyLPF(days,levs,car_lat,car_lon)))).and.(ca\
> r_dpvdyLPF(days,levs,car_lat,car_lon).lt.0.)) then
> box_area(0,days,levs) = box_area(0,days,levs) +
> (car_dpvdyLPF(days,le\
> vs,car_lat,car_lon)/((car_dims(2)-1)*(car_dims(3)-1)))
> end if
>
> end do ; car_lon
> end do ; car_lat
>
>
> can be replaced by using the "where" function:
>
> box_area(0,days,levs) =
> where((.not.(ismissing(car_dpvdyLPF(days,levs,:,:)))).and.(car_dpvdyLPF(days,levs,:,:).lt.0.),
> \
> box_area(0,days,levs)
> + (car_dpvdyLPF(days,levs,:,:)/((car_dims(2)-1)*(car_dims(3)-1)))
>
> box_area(0,days,levs))
>
> I haven't tested all this, so there may be some syntax errors.
>
> --Mary
>
>
>
> On Jun 22, 2010, at 11:26 PM, Kay Shelton wrote:
>
> > Hello,
> >
> > I am trying to overlay one xy plot onto another using the overlay
> function. Both plots have explicit tick marks and labels on the x-axis. When
> I overlay the plots, the tick marks and labels from the base plot show up
> but the ones from the transform plot do not. The data from the transform
> plot is plotted though.
> >
> > I have included a plot of what I am trying to achieve (ncl-help_draw).
> This was plotted without using overlay, but since I later wish to panel
> several plots I cannot call draw. I have also included the result from using
> the overlay function (ncl-help_overlay) and also what the individual plots
> look like (ncl-help_separate). The script used to produce ncl-help_overlay
> is also attached.
> >
> > Thank you for your help,
> >
> > Kay Shelton
> >
> <ncl-help_draw.pdf><ncl-help_overlay.pdf><ncl-help_separate.pdf><ncl-help.ncl>_______________________________________________
> > ncl-talk mailing list
> > List instructions, subscriber options, unsubscribe:
> > http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
>
Received on Wed Jun 23 18:47:30 2010

This archive was generated by hypermail 2.1.8 : Thu Jun 24 2010 - 14:10:27 MDT