Hi all, Many thanks for the efforts and suggestions.
This is getting closer to what is needed. No legend showing the density values yet. I was able to replicate a similar plot with the original data set. However when I tried this with a different data set that has other Fc & Sc values the plot does not work... just a blank PNG Code from console below: >bfs<-Eptfur > dim(bfs) [1] 5638 17 > names(bfs) [1] "Filename" "st" "Dur" "TBC" "Fmax" "Fmin" "Fmean" [8] "Tk" "Fk" "Qk" "Tc" "Fc" "Dc" "S1" [15] "Sc" "Qual" "Pmc" > library(plotrix) > # set the matrix limits a bit beyond the data ranges > fcsc_mat<-makeDensityMatrix(bfs$Fc,bfs$Sc,nx=25,ny=25, + zfun="sum",xlim=c(24,29),ylim=c(-20,10)) Range of density (>0) - Inf -Inf Warning messages: *1: In min(x) : no non-missing arguments to min; returning Inf** **2: In max(x) : no non-missing arguments to max; returning -Inf* > png("bat_call_plot.png") > par(mar=c(6,4,4,2)) > color2D.matplot(fcsc_mat, + main="Freqency by slope of bat calls", + extremes=c("yellow","red"),xlab="Frequency (kHz)", + ylab="Characteristic slope (octaves/s)", + border=NA,axes=FALSE) Warning messages: 1: In min(x) : no non-missing arguments to min; returning Inf 2: In max(x) : no non-missing arguments to max; returning -Inf 3: In min(x) : no non-missing arguments to min; returning Inf 4: In max(x) : no non-missing arguments to max; returning -Inf > axis(1,at=seq(5,95,10),round(seq(24.5,28.5,length.out=10),1)) > axis(2,at=seq(5,95,10),round(seq(-20,10,length.out=10),1)) > color.legend(0,-14,25,-10,legend=seq(0,10,length.out=5), + rect.col=color.scale(0:4,extremes=c("yellow","red")),align="rb") > text(12.5,-20,"Density (cell count)",xpd=TRUE) > dev.off() null device 1 I will not need to add a function it iterate as I will not be running this as an iterative task at one time... I just need the code to be able to use different data sets that have the same fields. The Sc values over the 200+ data sets will range from potentially large negative numbers to positive numbers depending on the slope of the calls, i.e. increasing frequencies or decreasing frequencies. An example of these two parameters for a single species with descriptive stats. N is valid number of call pulses, then 10%-90% bins of where the call pulses fall into. Parameters N Min Max Mean St.Dev 10% 25% 75% 90% Fc 32802 43.01 50.00 46.86 1.31 45.07 45.98 47.76 48.63 Sc 32802 -309.78 13.76 -6.60 10.98 -10.31 -7.50 -3.91 -2.81 I am very appreciative and thank you both for guiding the efforts. Bruce > Very nice. I forgot that you didn't have the complete data set. > > png("as_bat_call.png") > plot_ds (bfs[,c("Fc","Sc")], "plot 1", xlim = c (25, 30), ylim = c (-15, 10), > k1=1.25, k2=1.25) > dev.off() > > Jim > > On Tue, Jun 2, 2020 at 6:24 PM Abby Spurdle <spurdl...@gmail.com> wrote: >> I'm putting this back on the list. >> >>> So how would I set up the code to do this with the data type I have? >>> I will need to replicate the same task > 200 times with other data sets. >>> What I need to do is plot *Fc *against *Sc* with the third dimension being >>> the *density* of the data points. >> Using Jim's bat_call data: >> >> library (bivariate) >> >> plot_ds <- function (dataset, main="", xlim, ylim, ..., k1=1, k2=1) >> { names <- names (dataset) >> fh <- kbvpdf (dataset [,1], dataset [,2], k1 * bw.nrd (dataset >> [,1]), k2 * bw.nrd (dataset [,2]) ) >> plot (fh, main=main, xlab = names [1], ylab = names [2], >> xlim=xlim, ylim=ylim, >> ncontours=2) >> } >> >> plot_ds (bat_call, "plot 1", k1=1.25, k2=1.25) >> >> Note that I've used stats::bw.nrd. >> The k1 and k2 values, simply scale the default bandwidth. >> (In this case, I've increased the smoothness). >> >> If you want to do it 200+ times: >> (1) Create another function, to iterate over each data set. >> (2) If you want to save the plots, you will need to add in a call to >> pdf/png/etc and close the device, in each iteration. >> (3) It may be desirable to have constant xlim/ylim values, ideally >> based on the ranges of the combined data: >> >> plot_ds (bat_call, "plot 1", xlim = c (25, 30), ylim = c (-15, 10), >> k1=1.25, k2=1.25) >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. -- Bruce W. Miller, PhD. Neotropical bat risk assessments Conservation Fellow - Wildlife Conservation Society If we lose the bats, we may lose much of the tropical vegetation and the lungs of the planet Using acoustic sampling to identify and map species distributions and pioneering acoustic tools for ecology and conservation of bats for >25 years. Key projects include providing free interactive identification keys and call fact sheets for the vocal signatures of New World Bats [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.