::Free Statistics and Forecasting Software::

v1.2.1

:: Trivariate Scatterplots - Free Statistics Software (Calculator) ::

All rights reserved. The non-commercial (academic) use of this software is free of charge. The only thing that is asked in return is to cite this software when results are used in publications.

This free online software (calculator) computes the following charts for a trivariate dataset: 3-dimensional scatterplots, all combinations of 2-by-2 scatterplots, histograms, bivariate density plots with the corresponding contour plots and regression line.

This software enables the user to visually explore the relationship between 3 variables. In addition it illustrates how 3-dimensional scatterplots are related to 2-dimensional scatterplot matrices and density plots.

To make this more useful, the last plot uses Variables X and Y as coordinates and displays the interpolated Z values as a contour plot.

Enter (or paste) your data delimited by hard returns.

 Send output to: Browser Blue - Charts White Browser Black/White CSV Data X (click to load default data) 4.2 4.7 6.3 6.7 6.8 6.8 6.2 6.4 6 8.2 6.5 6.8 8.7 10 7.9 9.2 8.1 6.9 6.5 Data Y: 101.9 98.1 97.6 99.4 100.8 96.5 92.9 94.4 91.7 97.1 100.4 96.6 96.3 96 95.9 100 99.7 99.9 99.8 Data Z: 94.4 85.5 83 84.4 90 90 89.1 89.1 87.7 89.2 91.4 91.9 93.4 92.4 91.9 100 104 100.8 100.3 Sample Range:(leave blank to include all observations) From: To: gridsize on x-axis (?) gridsize on y-axis (?) plot contours YN plot points YN Name of dataset X Name of dataset Y Name of dataset Z Chart options Width: Height:

 Source code of R module x <- array(x,dim=c(length(x),1)) colnames(x) <- par5 y <- array(y,dim=c(length(y),1)) colnames(y) <- par6 z <- array(z,dim=c(length(z),1)) colnames(z) <- par7 d <- data.frame(cbind(z,y,x)) colnames(d) <- list(par7,par6,par5) par1 <- as.numeric(par1) par2 <- as.numeric(par2) if (par1>500) par1 <- 500 if (par2>500) par2 <- 500 if (par1<10) par1 <- 10 if (par2<10) par2 <- 10 library(GenKern) library(lattice) panel.hist <- function(x, ...) { usr <- par("usr"); on.exit(par(usr)) par(usr = c(usr[1:2], 0, 1.5) ) h <- hist(x, plot = FALSE) breaks <- h\$breaks; nB <- length(breaks) y <- h\$counts; y <- y/max(y) rect(breaks[-nB], 0, breaks[-1], y, col="black", ...) } bitmap(file="cloud1.png") cloud(z~x*y, screen = list(x=-45, y=45, z=35),xlab=par5,ylab=par6,zlab=par7) dev.off() bitmap(file="cloud2.png") cloud(z~x*y, screen = list(x=35, y=45, z=25),xlab=par5,ylab=par6,zlab=par7) dev.off() bitmap(file="cloud3.png") cloud(z~x*y, screen = list(x=35, y=-25, z=90),xlab=par5,ylab=par6,zlab=par7) dev.off() bitmap(file="pairs.png") pairs(d,diag.panel=panel.hist) dev.off() x <- as.vector(x) y <- as.vector(y) z <- as.vector(z) bitmap(file="bidensity1.png") op <- KernSur(x,y, xgridsize=par1, ygridsize=par2, correlation=cor(x,y), xbandwidth=dpik(x), ybandwidth=dpik(y)) image(op\$xords, op\$yords, op\$zden, col=terrain.colors(100), axes=TRUE,main="Bivariate Kernel Density Plot (x,y)",xlab=par5,ylab=par6) if (par3=="Y") contour(op\$xords, op\$yords, op\$zden, add=TRUE) if (par4=="Y") points(x,y) (r<-lm(y ~ x)) abline(r) box() dev.off() bitmap(file="bidensity2.png") op <- KernSur(y,z, xgridsize=par1, ygridsize=par2, correlation=cor(y,z), xbandwidth=dpik(y), ybandwidth=dpik(z)) print(op) image(op\$xords, op\$yords, op\$zden, col=terrain.colors(100), axes=TRUE,main="Bivariate Kernel Density Plot (y,z)",xlab=par6,ylab=par7) if (par3=="Y") contour(op\$xords, op\$yords, op\$zden, add=TRUE) if (par4=="Y") points(y,z) (r<-lm(z ~ y)) abline(r) box() dev.off() bitmap(file="bidensity3.png") op <- KernSur(x,z, xgridsize=par1, ygridsize=par2, correlation=cor(x,z), xbandwidth=dpik(x), ybandwidth=dpik(z)) print(op) image(op\$xords, op\$yords, op\$zden, col=terrain.colors(100), axes=TRUE,main="Bivariate Kernel Density Plot (x,z)",xlab=par5,ylab=par7) if (par3=="Y") contour(op\$xords, op\$yords, op\$zden, add=TRUE) if (par4=="Y") points(x,z) (r<-lm(z ~ x)) abline(r) box() dev.off() data.loess <- loess(z ~ x * y) data.loess xgrid <- seq(min(x), max(x), (max(x) - min(x)) / par1) ygrid <- seq(min(y), max(y), (max(y) - min(y)) / par2) data.fit <- expand.grid(x = xgrid, y = ygrid) (mtrxz <- predict(data.loess, newdata = data.fit)) bitmap(file="interpol1.png") image(xgrid, ygrid, mtrxz, col=terrain.colors(100), axes=T, main="Interpolation of Variable Z", xlab="Variable X", ylab="Variable Y") contour(xgrid, ygrid, mtrxz, add=T) dev.off()
 Top | Output | Charts | References

 Cite this software as: Wessa P., (2020), 3-Dimensional Scatterplots (v1.0.8) in Free Statistics Software (v1.2.1), Office for Research Development and Education, URL https://www.wessa.net/rwasp_cloud.wasp/ The R code is based on : Deepayan Sarkar (2006)., lattice: Lattice Graphics. R package, version 0.13-8. David Lucy and Robert Aykroyd (2004)., GenKern: Functions for generating and manipulating kernel density estimates., R package version 1.1-0.
 Top | Output | Charts | References