[ncl-talk] How to remember the overlaid plot inside a function
Cheung
zuibeidemei at 126.com
Thu Mar 9 17:49:23 MST 2017
Dear Mary,
Thanks for your reply.
This solved my problem.
Best
Cheung
At 2017-03-10 02:51:45, "Mary Haley" <haley at ucar.edu> wrote:
Hi Cheung,
Thanks for providing the script offline.
It was definitely the filled bars that were causing the tfPolyDraw errors. The issue is that you are creating these plots inside of a function, and each of the plot objects has a number of attributes attached that represent the filled bars. When the function is done, all of those attributes get deleted, and hence the errors and the lack of color in the bars.
You have to assure that all of those attributes "live" outside the function. I know this is a pain, but it's a simple fix. Add these three lines before you call "return(plot)" in "wrap_xy_plot_bar":
copy_VarAtts(plot1,plot)
copy_VarAtts(plot2,plot)
copy_VarAtts(plot3,plot)
--Mary
On Wed, Mar 8, 2017 at 8:56 AM, Mary Haley <haley at ucar.edu> wrote:
Hi Cheung,
It may be possible that you are creating a plot that has some internal calls to gsn_add_polyxxx or gsn_add_text under the hood.
For example, if you were doing a bar chart, or filling between two curves, then internally this uses gsn_add_polygon to fill the bars.
So, the issue could be on our end.
Can you send me your script? You can do this offline.
Thanks,
--Mary
On Tue, Mar 7, 2017 at 7:39 PM, Cheung <zuibeidemei at 126.com> wrote:
Hi Mary, thanks for your reply.
I did not use any function like gsn_add_polyxx or gsn_add_text, which can be handled as in the FAQ.
In my case, I use the procedure "overlay" to overlay several plots on a base plot,
as in this function a. The problem is that the "res for plot1" and "res for plot2"
are forgotten. The warning will persist even if "res for plot1" and "res for plot2"
are commented. They only disappear when I comment the "overlay" procedure.
function a
rex at xxx = xxx
plot = gsn_csm_xy(wks,x,y,res)
res at xxx = xxx ; call this as "res for plot1"
plot1 = gsn_csm_xy(wks,x,y,res)
res at xxx = xxx ; call this as "res for plot2"
plot2 = gsn_csm_xy(wks,x,y,res)
overlay(plot,plot1)
overlay(plot,plot2)
return(plot)
end function a
At 2017-03-07 23:36:31, "Mary Haley" <haley at ucar.edu> wrote:
Cheung,
See:
http://www.ncl.ucar.edu/FAQ/#err_msgs_027
When you get warnings about "tfPolyDrawList", this should have to do with code where you are attaching polylines, polygons, polymarkers, or text to a plot, and not in the creation of the plot itself.
Do you have any code where you are calling gsn_add_polyxxxx or gsn_add_text? If so, then please read the above FAQ question about how to make sure your return values for each call are unique.
--Mary
On Tue, Mar 7, 2017 at 7:44 AM, Cheung <zuibeidemei at 126.com> wrote:
Dear NCL:
I use a function to generate certain type of plot.
Inside this function, several plots are overlaid on a base plot, like this:
function a
rex at xxx = xxx
plot = gsn_csm_xy(wks,x,y,res)
res at xxx = xxx ; call this as "res for plot1"
plot1 = gsn_csm_xy(wks,x,y,res)
res at xxx = xxx ; call this as "res for plot2"
plot2 = gsn_csm_xy(wks,x,y,res)
overlay(plot,plot1)
overlay(plot,plot2)
return(plot)
end function a
Such codes will generate "warning TransformPreDraw: tfPolyDrawList element 0".
Although plot1 and plot 2 can be overlaid to the base plot when this function a is called,
the resultant plot lose all "res for plot1, 2". I guess this is because the new "res" are not
"alive" when this plot is returned. Is there any way to solve this?
Thanks for your help.
Best
Cheung
_______________________________________________
ncl-talk mailing list
ncl-talk at ucar.edu
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20170310/21ceb0c8/attachment.html
More information about the ncl-talk
mailing list