[ncl-talk] Printing regression formula on plot
Adam Phillips
asphilli at ucar.edu
Fri Oct 23 13:42:08 MDT 2020
Hi Jason,
gsn_add_text
<http://www.ncl.ucar.edu/Document/Graphics/Interfaces/gsn_add_text.shtml>
is a function, so you need to pass the returned output to a variable.
Assuming a value of 70 is within the x-axis range of the plot, and 5.6 is
within the y-axis range, you should be good to go with something like this:
dum = gsn_add_text(wks,plt,text, 70, 5.6,txres)
Hope that helps!
Adam
On Fri, Oct 23, 2020 at 1:20 PM Herb, Jason via ncl-talk <
ncl-talk at mailman.ucar.edu> wrote:
> Hello all,
>
> I am attempting to print the linear regression equation mX+b on my XY
> scatter plots. Unfortunatly, I have not had much luck in getting it to
> plot. Code script is below. Any suggestions?
>
> Thankyou
>
>
> ;This will create scatterplots of Modis derived PM2.5 data and surface
> measured PM2.5 data.
>
> begin
> f = "QNC-XY.out"
> data = asciiread(f,(/5856,2/),"float")
> x = data(:,1)
> ; x = new((/2,366/),float)
> x at _FillValue=integertoshort(-999)
> x=where(x.lt.0,x at _FillValue,x)
> x at long_name = "PSP PM25"
> ; x(0,:) = data(:,4)
> y = data(:,0)
> y at long_name = "Modis Derived PM25"
> y at _FillValue=integertoshort(-999)
> y=where(y.lt.0,y at _FillValue,y)
>
> ;************************************************
> ; calculate the regression coefficient (slope)
> ;************************************************
> rcl = regline(x, y) ; slope
> rcl at units = "MODIS/PSP"
> print(rcl)
>
> rcl_anova = regline_stats(x,y) ; linear regression: ANOVA
> print(rcl_anova)
>
> ;************************************************
> ; create an array to hold both the original data
> ; and the calculated regression line
> ; ---------
> ; y = mx+b
> ; m is the slope: rc returned from regline
> ; b is the y intercept: rc at yave attribute of rc returned from regline
> ;************************************************
> ; pltarry := new ( (/2,366/), typeof(x), x at _FillValue)
> pltarry := new ( (/2,5856/), typeof(x), x at _FillValue)
> ;************************************************************
> print(sprintf("%4.0f", x)+" "+sprintf("%4.0f", y))
>
> pltarry(0,:) = y ; use markers
> ; pltarry(1,:) = rcl*x + rcl at yintercept ; use solid line
> pltarry(1,:) = rcl*(x-rcl at xave) + rcl at yave ; y =m*x + B
>
> ;************************************************
> ; Plotting parameters
> ;************************************************
> plot = new (1, "graphic")
> wks = gsn_open_wks("png","scatter_regress") ; send graphics
> to PNG file
>
> resP = True ; modify the panel plot
> resP at gsnMaximize = True ; maximize plot in frame
> resP at gsnPanelMainString = "Modis vs PSP" ; title
> resP at gsnPanelRowSpec = True ; tell panel what
> order to plot
> ; gsn_panel(wks,plot,(/2,1/),resP)
>
>
> ; wks = gsn_open_wks("png","scatter_regress") ; send
> graphics to PNG file
> res = True
> res at gsnDraw = False
> res at gsnFrame = False
> res at xyMarkLineModes = (/"Markers","Lines"/) ; choose which have
> markers
> res at xyMarkers = 16 ; choose type of
> marker
> res at xyMarkerColor = "red" ; Marker color
> res at xyMarkerSizeF = 0.005 ; Marker size
> (default 0.01)
> res at xyDashPatterns = 1 ; solid line
> res at xyLineThicknesses = (/1,2/) ; set second line to 2
> res at tmYLFormat = "f" ; not necessary but
> nicer labels
>
> ; res at tiMainString = "Modis vs PSP" ; title
> ; plt = gsn_csm_xy (wks,x,pltarry,res) ; create plot
> ; plt = gsn_csm_xy (wks,x,data,res) ; create plot
> res = True
> txres = True ; label BW line
> txres at txFontHeightF = 0.0175 ; font height
> txres at txJust = "CenterCenter" ; Set lable location
>
> if (rcl_anova at b(0).gt.0) then
> text = "AOD_PM2.5 = "+ sprintf("%5.3f", rcl_anova at b(1))+"*PM25 +
> "+sprintf("%5.3f", abs(rcl_anova at b(0)))
> else
> text = "AOD_PM2.5 = "+ sprintf("%5.3f", rcl_anova at b(1))+"*PM25 -
> "+sprintf("%5.3f", abs(rcl_anova at b(0)))
> end if
> plt = gsn_csm_xy (wks,x,pltarry,res) ; create plot
> gsn_add_text(wks,plt,text, 70, 5.6,txres)
> draw(plt)
> frame(wks)
>
>
>
>
>
> ; res at gsnMaximize = True ; maximize plot
> ; res at tiMainString = "Scatter Plot" ; add title
> ; res at xyMarkLineMode = "Markers" ; choose to use
> markers
> ; res at xyMarkers = 16 ; choose type of
> marker
> ; res at xyMarkerColor = "NavyBlue" ; Marker color
> ; res at xyMarkerSizeF = 0.01 ; Marker size
> (default 0.01)
> ;
> ; plot = gsn_xy (wks,x,y,res) ; create plot
> end
>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at mailman.ucar.edu
> List instructions, subscriber options, unsubscribe:
> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
--
Adam Phillips
Associate Scientist, Climate and Global Dynamics Laboratory, NCAR
www.cgd.ucar.edu/staff/asphilli/ 303-497-1726
<http://www.cgd.ucar.edu/staff/asphilli>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20201023/cc535b5b/attachment.html>
More information about the ncl-talk
mailing list