rplotstandard-errorplotrixerrorbar

Plotting standard error on radial.plot()


I am using the radial.plot function of the plotrix-package in R. Does anyone know of a straightforward way to implement standard-error bars. The solution would have to work even when there is more than one datapoint per radial position which could lead to partial overlap of the SE-bar (see graph below).

Now the graph looks like this:

test

Used Code:

library(plotrix)
ppp <- matrix(runif(1:16, 10, 60), nrow=2, ncol=8)
kl <- c(0, pi/4, pi/2, pi*0.75,pi, pi+pi/4,pi+pi/2, pi+pi*0.75)
plot_rt_soa7 <- radial.plot(ppp,rp.type="p",radial.pos=kl,
                label.pos=kl,start=pi/2,
                labels=1:8,radial.lim=c(-10,65),main="SOA 7")
                legend(45,50,c("T-oben", "T-unten"),col=1:2,lty=1)

The errorbars could look e.g. like this: (from How to plot error bars in polar coordinates in python?)

enter image description here

Any help would be much appreciated


Solution

  • Here is some basic code that will plot error bars for both the 'x' (orthogonal to radius) and 'y' (parallel to radius) dimensions, and a point for the center value. It does not use the plotrix package for the error bar plotting, but instead uses R base graphics. You must provide the errors for the dimensions or comment out the part of the code that plots undesired errors. There are several graphical parameters for line weight, color, point color, and point shape. A sample graph is provided below.

    library(plotrix)
    set.seed(10) # seed for reproducable graph
    ppp <- matrix(runif(1:16, 10, 60), nrow=2, ncol=8)
    kl <- c(0, pi/4, pi/2, pi*0.75,pi, pi+pi/4,pi+pi/2, pi+pi*0.75)
    start <- pi/2 # know starting value for plotting points angularl
    rad_low_lim <- -10 # used when computing values of the error lines and in plot limits
    plot_rt_soa7 <- radial.plot(ppp,rp.type="p"
                                ,radial.pos=kl
                                ,label.pos=kl
                                ,start=start
                                ,labels=1:8
                                ,radial.lim=c(rad_low_lim,65)
                                ,main="SOA 7")
    legend(40,120,c("T-oben", "T-unten"),col=1:2,lty=1)
    
    # generating random error values for both x and y
    error_ppp_y <- matrix(rnorm(16, 15, 5), nrow=2, ncol=8)
    error_ppp_x <- matrix(rnorm(16, 10, 3), nrow=2, ncol=8)
    
    bar_cols <- c('blue','green') # colors for bars
    lwds <- c(4,2) # line weights for bars
    pts_cols <- c('black','red') # colors for points
    pts_pch <- c(19,17) # point pch
    
    # loop over the number of rows (T-oben and T-unten)
    for(j in 1:2){
    
      # loop over the observations
      for(i in 1:ncol(ppp)){
    
        # plotting the errors of the 'y' value
        # center value is determined and errors are rotated to make
        # parallel to the radius
        lines(c(ppp[j,i]+error_ppp_y[j,i]-rad_low_lim,ppp[j,i]-error_ppp_y[j,i]-rad_low_lim)*cos(kl[i]+start)
              ,c(ppp[j,i]+error_ppp_y[j,i]-rad_low_lim,ppp[j,i]-error_ppp_y[j,i]-rad_low_lim)*sin(kl[i]+start)
              ,lwd=lwds[j]
              ,col=bar_cols[j]
        )
    
        # plotting the 'x' errors that are orthognal to the radius
        # points are the "center" with the error values rotated to make them orthognal to the radius
        # comment out if not desired
        lines((ppp[j,i]-rad_low_lim)*cos(kl[i]+start)+c(error_ppp_x[j,i],-error_ppp_x[j,i])*cos(kl[i])
              ,(ppp[j,i]-rad_low_lim)*sin(kl[i]+start)+c(error_ppp_x[j,i],-error_ppp_x[j,i])*sin(kl[i])
              ,lwd=lwds[j]
              ,col=bar_cols[j]
        )
    
        # plotting points for the center
        # comment out if not desired
        points((ppp[j,i]-rad_low_lim)*cos(kl[i]+start)
              ,(ppp[j,i]-rad_low_lim)*sin(kl[i]+start)
              ,col=pts_cols[j]
              ,pch=pts_pch[j]
        )
      }
    }
    

    enter image description here