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 at 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 at 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. >
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 at 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 at 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 at 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.
Ogbos Okike
2020-May-08 12:33 UTC
[R] Adding overlap legend to a histogram: FIXED!!!!!!!!!!!!
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 at 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 at 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 at 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 at 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]]