# Densityplot Variations

## Variation I

Just playing around the other day to get the default plot.density() function a bit more like publishing quality. Above is my favorite so far. Further down are two more spartanic versions.

In this connection I also wrote my first function. When I get more customed to R I will package my ideas into an R library – but later…

There is the possibility to call R-functions without embedding the code into your analysis script, but I did not look that up yet, so embedding the following code into your script (at the beginning) and then using
`densityplot(Dataset\$Coviate)`
will do the job, where Dataset and Covariate have to be replaced by the according values of course.

Now the function code:
```# function densityplot densityplot <- function(x , digits = 1 , xlab = "" , ylab = "" , main = "Density" , col = "blue"){ dens <- density(x , na.rm = T) bins <- as.numeric(cut(dens\$x , breaks = fivenum(x))) i1 <- bins == 1 & !is.na(bins) i2 <- bins == 2 & !is.na(bins) i3 <- bins == 3 & !is.na(bins) i4 <- bins == 4 & !is.na(bins) x.p1 <- dens\$x[i1]; x.p1 <- c(x.p1,max(x.p1),min(x.p1)) x.p2 <- dens\$x[i2]; x.p2 <- c(x.p2,max(x.p2),min(x.p2)) x.p3 <- dens\$x[i3]; x.p3 <- c(x.p3,max(x.p3),min(x.p3)) x.p4 <- dens\$x[i4]; x.p4 <- c(x.p4,max(x.p4),min(x.p4)) y.p1 <- dens\$y[i1]; y.p1 <- c(y.p1,0,0) y.p2 <- dens\$y[i2]; y.p2 <- c(y.p2,0,0) y.p3 <- dens\$y[i3]; y.p3 <- c(y.p3,0,0) y.p4 <- dens\$y[i4]; y.p4 <- c(y.p4,0,0) plot(dens , type = "n" , axes = F, main = main, xlab = xlab , ylab = ylab) polygon(x.p1,y.p1 , border = F , col = col) polygon(x.p2,y.p2 , border = F , col = col) polygon(x.p3,y.p3 , border = F , col = col) polygon(x.p4,y.p4 , border = F , col = col) axis(side = 1 , line = 0 , at = fivenum(x, na.rm = T) , label = c("Minimum","Quartile 1", "Median", "Quartile 3", "Maximum"), lwd = 0, cex.axis = 0.6) axis(side = 1 , line = 1 , at = fivenum(x, na.rm = T)) axis(side = 1 , line = 1 , at = round(mean(x , na.rm = T) , digits = digits) , tcl = 0.4 , label = F) axis(side = 1 , line = -1.5 , at = round(mean(x , na.rm = T) , digits = digits) , tick = F , cex.axis = 0.6) axis(side = 1 , line = -2.0 , at = round(mean(x , na.rm = T) , digits = digits) , label = "Mean" , tick = F , cex.axis = 0.6) }```

## Variation II

Some might find the colored area to much, although IMHO it puts the focus on the fact that one is looking at areas when ploting a density. But then something similar without the color fill. Not a function just a few lines of code to embed and adjust to the script:

```plot(density(angio\$PE_ALDER , na.rm = T), axes = F, main = "Basic densityplot", xlab = "" , ylab = "") # Add Quartiles axis(side = 1 , line = 1 , at = fivenum(angio\$PE_ALDER, na.rm = T) , label = c("Minimum","Quartile 1", "Median", "Quartile 3", "Maximum"), lwd = 0, cex.axis = 0.6) axis(side = 1 , line = 2 , at = fivenum(angio\$PE_ALDER, na.rm = T)) abline(v = fivenum(angio\$PE_ALDER, na.rm = T)[2:4] , lty = 3) # Mean axis(side = 1 , line = 2 , at = round(mean(angio\$PE_ALDER , na.rm = T) , digits = 2) , tcl = 0.4 , label = F) axis(side = 1 , line = -0.5 , at = round(mean(angio\$PE_ALDER , na.rm = T) , digits = 2) , tick = F) axis(side = 1 , line = -1.4 , at = round(mean(angio\$PE_ALDER , na.rm = T) , digits = 2) , label = "Mean" , tick = F , cex.axis = 0.6) abline(v = mean(angio\$PE_ALDER , na.rm = T) , lty = 4)``` ```plot(density(angio\$PE_ALDER , na.rm = T), axes = F, main = "Basic densityplot", xlab = "Age") abline(v = fivenum(angio\$PE_ALDER, na.rm = T)[2:4] , lty = 3) axis(side = 1 , line = -1 , at = fivenum(angio\$PE_ALDER, na.rm = T) , label = c("Minimum","Quartile 1", "Median", "Quartile 3", "Maximum"), lwd = 0, cex.axis = 0.6) axis(side = 1 , at = fivenum(angio\$PE_ALDER, na.rm = T))```