[R] Adding overlap legend to a histogram: FIXED!!!!!!!!!!!!

Ogbos Okike g||ted|||e2014 @end|ng |rom gm@||@com
Fri May 8 14:33:12 CEST 2020


Dear Jim,
This is too great!!! I nearly got lost as I struggle to compare my data
with the graph.  I have to use a coincident algorithm to compare the two
datasets with the histogram before I begin to understand what is going on.

Thank you for giving me more than I requested/expected!!! This is the kind
of confusing/complicating diagrams that best suit some reviewers.

I am yet at the verge of understanding the entire results and will surely
return with some more queries as I progress.

Warmest regards
Ogbos

On Fri, May 8, 2020 at 11:32 AM Jim Lemon <drjimlemon using gmail.com> wrote:

> Hi Ogbos,
> While this solution is not entirely correct, I think it is a start.
> First I took your data files and made them "sourceable" by adding
> "FD[1|2]<-" at the top and renaming them "FD1.R" and "FD2.R". Running
> the following code produces something that is at least close to what
> you want. The code is fairly well commented so it should be easy to
> see what I have done:
>
> # read in the FD1 data
> source("FD1.R")
> # read in the FD2 data
> source("FD2.R")
> # convert year-month-day columns to dates
> FD1$data.year<-FD1$data.year+ifelse(FD1$data.year < 50,2000,1900)
> FD1$date<-as.Date(paste(FD1$data.year,FD1$data.month,FD1$data.day,sep="-"),
>  format="%Y-%m-%d")
> FD2$data.year<-FD2$data.year+ifelse(FD2$data.year < 50,2000,1900)
> FD2$date<-as.Date(paste(FD2$data.year,FD2$data.month,FD2$data.day,sep="-"),
>  format="%Y-%m-%d")
> # check the ranges for overlap
> range(FD1$date)
> range(FD2$date)
> # get the overall range of the plot
> xlim<-range(c(FD1$date,FD2$date))
> # FD1 spans the date range so xlim is not really needed here
> # now get the counts for each data set
> FD1counts<-as.vector(table(cut(FD1$date,breaks="years")))
> # FD2 is missing 1996, 1997 and 2016 so add zeros at the beginning and end
> FD2counts<-c(0,0,as.vector(table(cut(FD2$date,breaks="years"))),0)
> # set up the bar colors
> barcol<-matrix(c(rep("red",2),rep("blue",18),"red",
>  rep("red",2),rep("green",18),"red"),nrow=2,byrow=TRUE)
> # use barp as barplot can't do the colors
> library(plotrix)
> barp(rbind(FD1counts,FD2counts),names.arg=1996:2016,
>  main="Observation counts for FD1 and FD2",
>  xlab="Year",ylab="Observations",col=barcol)
> legend(12,80,c("FD1 only","FD1 & FD2","FD2 & FD1"),
>  fill=c("red","blue","green"))
>
> This shows the overlap in blue and green. You can make the overlap
> colors whatever you like. It doesn't account for the fact that FD2
> only overlaps for part of a year on both ends. You may not be worried
> about this.
>
> Jim
>
> On Fri, May 8, 2020 at 4:07 PM Ogbos Okike <giftedlife2014 using gmail.com>
> wrote:
> >
> > Dear Jim,
> > Thank you for looking into this.
> > Sorry, there was actually no overlap in the small part of the data I
> reported. My error of omission.
> >
> > So when I run my full data with the adjustment you made, I got some
> thing that was far from what I was expecting. That tell me that I need to
> send the complete data to enable you correctly adjust the code, especially
> in the light of the missing/present overlap.
> > I have used deput function to attach the two files. Please use any
> symbol to depict the color/mark/legend of the overlap dates (just to enable
> the reader visualize what is going on). I am actually trying to display
> event frequency/occurrence per year.
> >
> > Thank you and warmest regards
> > Ogbos
> >
> > On Fri, May 8, 2020 at 1:13 AM Jim Lemon <drjimlemon using gmail.com> wrote:
> >>
> >> Hi Ogbos,
> >> I don't think that your example allows us to work out what you are
> >> trying to do. For one thing, "x1" and "x2" do not overlap. Also, you
> >> are plotting the frequencies of dates of observations, which may not
> >> be what you want.
> >> The following code will correctly display your example:
> >>
> >> hist(x1,breaks="years",freq=T,axes=F,xlim=c(9400,11100),col=c1a)
> >> hist(x2,breaks="years",freq=T,axes=F,add=T,col=c2a)
> >>  axis.Date(1, at=seq(as.Date(min(x1)), as.Date(max(x2)), by="years"))
> >>  axis(2)
> >> legend("topleft", c("AUTO", "MANUAL"), fill=c("red", "blue"))
> >>
> >> What it is displaying is the frequency of observations in your two
> >> vectors by calendar year. If this is what you want, and you can
> >> explain how you would like "overlap" to be displayed, we can probably
> >> provide better help.
> >>
> >> Jim
> >>
> >>
> >> On Fri, May 8, 2020 at 7:01 AM Ogbos Okike <giftedlife2014 using gmail.com>
> wrote:
> >> >
> >> > Dear Experts,
> >> > Greetings.
> >> >
> >> > I am trying to display two datasets in a histogram. I have been able
> to
> >> > plot the graph and added the legend for the two colors. I am, however,
> >> > having difficulties adding a legend to represent the regions of
> overlap
> >> > (the third legend).  Below are my data and code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list