Re: panel plots

From: <mamadoulamine.mbaye_at_nyahnyahspammersnyahnyah>
Date: Fri Mar 14 2014 - 12:47:06 MDT

Hi Karin,

Thanks for your answer.

Best Regards;

Mamadou

________________________________
De : Karin Meier-Fleischer <meier-fleischer@dkrz.de>
Envoyé : vendredi 14 mars 2014 11:14
À : mamadoulamine.mbaye@ucad.edu.sn
Cc : Kyle Griffin; ncl-talk
Objet : Re: [ncl-talk] panel plots

Hi Mamadou,

to panel the xy-plots, you should use gsn_add_annotation to connect the 3 xy-plots instead of overlaying.

  bar_plot = new(6,graphic)
  do i=0,5

  ;---Set resources common to both plots
     res = True
     res@gsnFrame = False
     res@gsnDraw = False

     bres = res
     bres@gsnXYBarChart = True
     bres@gsnXYBarChartBarWidth = 0.77
     bres@gsnXYBarChartColors = "blue"
     bres@tmYROn = False
     bres@gsnYRefLine = 0.
     bres@trYMaxF = 30.
     bres@trYMinF = -50.
     bres@tiYAxisFontHeightF = 0.03
     bres@tiYAxisString = "Rainfall change (%)"
     bres@tiYAxisSide = "Left"

     plot(i) = gsn_csm_xy (wks,month,pr1,bres)

….
     xy_plot = gsn_csm_xy (wks,month,pr2,xyres)
     anno_id = gsn_add_annotation(plot(i), xy_plot, False)

….
     xy_plot1 = gsn_csm_xy (wks,month,pr3,xyres)
     anno_id = gsn_add_annotation(plot(i), xy_plot1, False)

  end do

;-- create panel
  pres = True
  gsn_panel(wks,plot,(/3,2/),pres)

Bye,
Karin

Am 14.03.2014 um 16:40 schrieb mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn>:

Hi Kyle,
Ok thank you very much for your suggestions. I will try it after.
Best Regards,
Mamadou
________________________________
De : windrunnerxc@gmail.com<mailto:windrunnerxc@gmail.com> <windrunnerxc@gmail.com<mailto:windrunnerxc@gmail.com>> de la part de Kyle Griffin <ksgriffin2@wisc.edu<mailto:ksgriffin2@wisc.edu>>
Envoyé : vendredi 14 mars 2014 08:26
À : mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn>
Cc : Kyle Griffin; ncl-talk
Objet : Re: [ncl-talk] panel plots

Ah, I think I understand what you want to do. This is going to be a bit more complicated. You're looking to overlay 3 plots on top of each other to form a single plot, and then panel a total of six of these combined plots. The challenge is your system doesn't use traditional overlay methods, and thus is not readily doable with gsn_panel. You do have the option of attempting to panel things manually, setting vpXF, vpYF, vpXWidthF, and vpYWidthF manually for each "panel" plot in order to get them all to line up within the workspace, but this will require a bit of experimentation and trial and error to get the sizes correct.

I'm going to throw out some untested ideas here, so I apologize in advance if they don't work or aren't quite perfect.

What I would recommend is making three arrays of six graphics...

plots_box = new(6,graphic)
plots_xy1 = new(6,graphic)
plots_xy2 = new(6,graphic)

With this, make each individual component of your plots and plot each with gsn_panel. What you can then do is use the same technique you have above to try and overlay the already-paneled plots. Essentially, you'll be using the same code as above but with gsn_panel calls where the gsn_csm_xy calls are currently. Of course, you'll have to have all six of your calls to gsn_csm_xy before you call gsn_panel as well.

It'll look something like

plots_box(0) = gsn_csm_xy(...)
plots_box(1) = gsn_csm_xy(...)
....
gsn_panel(wks,plots_box,(/2,3/),pres)

plots_xy1(0) = gsn_csm_xy(...)
plots_xy1(1) = gsn_csm_xy(...)
....
gsn_panel(wks,plots_xy1,(/2,3/),pres)

plots_xy2(0) = gsn_csm_xy(...)
plots_xy2(1) = gsn_csm_xy(...)
....
gsn_panel(wks,plots_xy2,(/2,3/),pres)

If the figures are the same size, including axes/colorbars/titles, they could line up and produce the result you desire. More likely, they are going to be slightly out of alignment and the whole figure will look terrible. You'll also have to try to ensure that gsn_panel isn't framing the image with each call with pres@gsnFrame = False, although I'm not certain you can set that resource for a panel plot.

You've got a complicated but - in theory - doable task here. I'm not particularly well versed in moving things around the viewport manually, so hopefully others can chime in here. My last word of advice is to consider making each plot like the one you first sent us and use an external program to stitch them together as a panel - it might be quicker/simpler than learning how to do so in NCL.

Good luck!

Kyle

----------------------------------------
Kyle S. Griffin
Department of Atmospheric and Oceanic Sciences
University of Wisconsin - Madison
Room 1421
1225 W Dayton St, Madison, WI 53706
Email: ksgriffin2@wisc.edu<mailto:ksgriffin2@wisc.edu>

On Fri, Mar 14, 2014 at 9:51 AM, mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn> <mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn>> wrote:
Hi,
Karin has proposed this, and also I have tried before, It did not work that's why I removed it in the script.
I repeat that I did not want to separate them (plot(0),plot(1), and plot(2)). the plots (1) &(2) have the same Y axis, and both have the same x axis with plot (0). You can see in the toto.pdf file, I have a panel of 3 figures and each figure have 3 plots( 1 barchart and 2 curves).
by doing gsn_panel(wks,plot,(/3,1/),pres): this means that 3 plots in 3 raws.

I want to add 6 plots others like this (this is not in the script) . I was trying to make sure I can panel it without separating them and put it in a particular place(by using top, bottom ,left and right resources panel ) before adding other data sets.

Maybe I have to put the general scripts with 9 data sets
Best Regards,
Mamadou

________________________________
De : windrunnerxc@gmail.com<mailto:windrunnerxc@gmail.com> <windrunnerxc@gmail.com<mailto:windrunnerxc@gmail.com>> de la part de Kyle Griffin <ksgriffin2@wisc.edu<mailto:ksgriffin2@wisc.edu>>
Envoyé : vendredi 14 mars 2014 06:13
À : mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn>
Cc : ncl-talk
Objet : Re: [ncl-talk] panel plots

Hi Mamadou,

It looks like you are creating all of your plots for paneling, but not actually paneling them. You'll need to add a call to gsn_panel at the end, likely instead of the maximize_output call you have currently.

https://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_panel.shtml

This call will create the graphics scaled down to the appropriate sizes and call the appropriate draw and frame functions as well. You even seem to be setting panel resources with the attributes of pres, but not actually using them. While you may need to add further attributes to pres in order to get your plot to look perfect, simply adding a call similar to the one below should get you going...

gsn_panel(wks,plot,(/3,1/),pres)

This should give you a plot of all the plots you've saved in your variables plot(0), plot(1), and plot(2) in a paneled plot with 3 rows in 1 column using attributes from pres.

You can look at other panel plot examples here, if you want to figure out some additional settings to set with attributes:

https://www.ncl.ucar.edu/Applications/panel.shtml

Let the list know if you need any further help...

Kyle

----------------------------------------
Kyle S. Griffin
Department of Atmospheric and Oceanic Sciences
University of Wisconsin - Madison
Room 1421
1225 W Dayton St, Madison, WI 53706
Email: ksgriffin2@wisc.edu<mailto:ksgriffin2@wisc.edu>

On Fri, Mar 14, 2014 at 4:33 AM, mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn> <mamadoulamine.mbaye@ucad.edu.sn<mailto:mamadoulamine.mbaye@ucad.edu.sn>> wrote:
Hi,
I would like to do a panel of 3 plots like the one joined. If I use plot = new(3,graphic), and replace ba_plot, xy_plot,and xy_plot1 by plot(0), plot(1), and plot(2), it doesn't not work. Here is the script I use to generate this figure (with 3 plots):

month=ispan(1,12,1)
  wks = gsn_open_wks("x11","toto")

  ;---Set resources common to both plots
  res = True
  res@gsnFrame = False
  res@gsnDraw = False

  res@trXMinF = 0
  res@trXMaxF = 13

   ;----------------------------------------- Bar chart ----------------------------------------------------------------------------

  bres = res
  bres@gsnXYBarChart = True
  bres@gsnXYBarChartBarWidth = 0.77
  bres@gsnXYBarChartColors = "blue"
  bres@tmYROn = False
  bres@gsnYRefLine = 0.
  bres@trYMaxF = 30
  bres@trYMinF = -50
  bres@tiMainFontHeightF = 0.03

  bar_plot = gsn_csm_xy (wks,month,pr1,bres)
  ;--- for the legend
    lbres = True
    lbres@lbLabelFontHeightF = 0.015
    lbres@lbFillColors = "blue"
    lbres@vpHeightF = .015
    lbres@vpWidthF = .15
    lbres@lbPerimOn = False
    lbres@lbFillPattern = "SolidFill"
    lbres@lbMonoFillPattern = True
    label= "Rainfall change"
    gsn_labelbar_ndc(wks,1,label,0.2,0.78,lbres)

   ;---Get viewport values for bar plot
  getvalues bar_plot
    "vpXF" : vpx
    "vpYF" : vpy
    "vpWidthF" : vpw
    "vpHeightF" : vph
  end getvalues

   ;--------------------------XY curve resources seasonal cycle---------------------------------------------------------------
  xyres = res
  xyres@xyLineThicknessF = 6.0
  xyres@xyLineColor = "red"
  xyres@trYMaxF = 7.
  xyres@trYMinF = 0

;---Turn off bottom, top, and left tickmarks
  xyres@tmXBOn = False
  xyres@tmXTOn = False
  xyres@tmYLOn = False
  xyres@tmYROn = True
  xyres@tmYRLabelsOn = True

;---Set a title on right Y axis seasonal cycle
  xyres@tiYAxisString = "Rainfall (mm/day)"
  xyres@tiYAxisSide = "Right"

  ; Make sure XY curve is drawn in same viewport space as bar plot
; Note there is no attempt to mathematically map the left and
; right Y axis to each other.
  xyres@vpXF = vpx
  xyres@vpYF = vpy
  xyres@vpWidthF = vpw
  xyres@vpHeightF = vph

  xyres@pmLegendDisplayMode = "Always"
  xyres@pmLegendSide = "Top"
  xyres@pmLegendParallelPosF = 0.55
  xyres@pmLegendOrthogonalPosF = -0.148

  xyres@pmLegendWidthF = 0.1
  xyres@pmLegendHeightF = 0.1
  xyres@lgLabelFontHeightF = .015
  xyres@lgPerimOn = False
  xyres@xyLineThicknesses = "12.0"
  xyres@xyExplicitLegendLabels ="RCP45_2011-2040"

  xy_plot = gsn_csm_xy (wks,month,pr2,xyres)

 ;============= Add a second curve on the right==============================
  xyres@pmLegendDisplayMode = "Always"
  xyres@pmLegendSide = "Top"
  xyres@pmLegendParallelPosF = 0.87
  xyres@pmLegendOrthogonalPosF = -0.148

  xyres@pmLegendWidthF = 0.1
  xyres@pmLegendHeightF = 0.1
  xyres@lgLabelFontHeightF = .015
  xyres@lgPerimOn = False
  xyres@xyLineThicknesses = "12.0"
  xyres@xyExplicitLegendLabels ="historical"

  xyres@xyLineColor = "green"
 xy_plot1 = gsn_csm_xy (wks,month,pr3,xyres)

;=============================================================
  pres = True
  pres@gsnMaximize = True
  maximize_output(wks,pres)

I would just want to know how to panel this, and after I will add 2 others like this plot at the same page.
Best Regards,
Mamadou

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_________________________________
Karin Meier-Fleischer

Deutsches Klimarechenzentrum GmbH

Application Support
Visualization

Bundesstrasse 45a
D-20146 Hamburg, Germany

E-Mail: meier-fleischer@dkrz.de<mailto:meier-fleischer@dkrz.de>
Internet: http://www.dkrz.de/
Phone: +49 40 460094 126
Fax: +49 40 460094 270

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Fri Mar 14 12:47:37 2014

This archive was generated by hypermail 2.1.8 : Fri Mar 14 2014 - 15:08:52 MDT