Hi, I'm creating a couple of mirrored bar plots. Below is data and code for one. My problem is that I need the axis to go from -35 to 35 by 5. I can't get that to happen with the code below. I need it so all my plots are on the same scale. How can I do that using barplot? For reasons, I can't use ggplot or lattice. Thanks, Jen df <- data.frame(matrix(c( '18-29', 'Females', 23.221039, '30-44', 'Females', 16.665565, '45-59', 'Females', 7.173238, '60+', 'Females', 4.275979, '18-29', 'Males', -22.008875, '30-44', 'Males', -15.592936, '45-59', 'Males', -7.312195, '60+', 'Males', -3.750173), nrow=8, ncol=3, byrow=T, dimnames=list(NULL, c("Age", "Sex", "Percent")))) df$Percent <- as.numeric(as.character(df$Percent)) midf <- barplot(height = df$Percent[df$Sex == "Females"]) # distribution of men and women with solid fill plot(c(0,5),range(df$Percent),type = "n", axes=FALSE, ann=F) barplot(height = df$Percent[df$Sex == "Females"], add = TRUE,axes = FALSE, col="#b498ec", ylab="") barplot(height = df$Percent[df$Sex == "Males"], add = TRUE, axes = F, col="#f8bb85", ylab="", names.arg=c("18-29", "30-44", "45-59", "60+")) axis(side=2, at = seq(-35,35,by=5), labels=format(abs(seq(-35,35,by=5)), scientific=F), cex.axis=0.7) [[alternative HTML version deleted]]
Hi Jen, It seems way too simple, but does this work? axis(side=2,at=seq(-35,35,by=5),cex.axis=0.7) You may want to consider using a pyramid plot for this. Jim On Thu, Mar 16, 2017 at 11:45 AM, Jen <plessthanpointohfive at gmail.com> wrote:> Hi, I'm creating a couple of mirrored bar plots. Below is data and code > for one. > > My problem is that I need the axis to go from -35 to 35 by 5. I can't get > that to happen with the code below. I need it so all my plots are on the > same scale. > > How can I do that using barplot? For reasons, I can't use ggplot or > lattice. > > Thanks, > > Jen > > > > df <- data.frame(matrix(c( > '18-29', 'Females', 23.221039, > '30-44', 'Females', 16.665565, > '45-59', 'Females', 7.173238, > '60+', 'Females', 4.275979, > '18-29', 'Males', -22.008875, > '30-44', 'Males', -15.592936, > '45-59', 'Males', -7.312195, > '60+', 'Males', -3.750173), > nrow=8, ncol=3, byrow=T, > dimnames=list(NULL, c("Age", "Sex", "Percent")))) > > df$Percent <- as.numeric(as.character(df$Percent)) > > midf <- barplot(height = df$Percent[df$Sex == "Females"]) > > # distribution of men and women with solid fill > > plot(c(0,5),range(df$Percent),type = "n", axes=FALSE, ann=F) > > barplot(height = df$Percent[df$Sex == "Females"], add = TRUE,axes = FALSE, > col="#b498ec", ylab="") > > barplot(height = df$Percent[df$Sex == "Males"], add = TRUE, axes = F, > col="#f8bb85", ylab="", > names.arg=c("18-29", "30-44", "45-59", "60+")) > > axis(side=2, at = seq(-35,35,by=5), > labels=format(abs(seq(-35,35,by=5)), scientific=F), > cex.axis=0.7) > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.
Hi Jim, Thanks for replying. Unfortunately, that doesn't work. The axis automatically scales to (-30, 25, by 5). Jen On Wed, Mar 15, 2017, 10:09 PM Jim Lemon <drjimlemon at gmail.com> wrote:> Hi Jen, > It seems way too simple, but does this work? > > axis(side=2,at=seq(-35,35,by=5),cex.axis=0.7) > > You may want to consider using a pyramid plot for this. > > Jim > > > On Thu, Mar 16, 2017 at 11:45 AM, Jen <plessthanpointohfive at gmail.com> > wrote: > > Hi, I'm creating a couple of mirrored bar plots. Below is data and code > > for one. > > > > My problem is that I need the axis to go from -35 to 35 by 5. I can't > get > > that to happen with the code below. I need it so all my plots are on the > > same scale. > > > > How can I do that using barplot? For reasons, I can't use ggplot or > > lattice. > > > > Thanks, > > > > Jen > > > > > > > > df <- data.frame(matrix(c( > > '18-29', 'Females', 23.221039, > > '30-44', 'Females', 16.665565, > > '45-59', 'Females', 7.173238, > > '60+', 'Females', 4.275979, > > '18-29', 'Males', -22.008875, > > '30-44', 'Males', -15.592936, > > '45-59', 'Males', -7.312195, > > '60+', 'Males', -3.750173), > > nrow=8, ncol=3, byrow=T, > > dimnames=list(NULL, c("Age", "Sex", "Percent")))) > > > > df$Percent <- as.numeric(as.character(df$Percent)) > > > > midf <- barplot(height = df$Percent[df$Sex == "Females"]) > > > > # distribution of men and women with solid fill > > > > plot(c(0,5),range(df$Percent),type = "n", axes=FALSE, ann=F) > > > > barplot(height = df$Percent[df$Sex == "Females"], add = TRUE,axes > FALSE, > > col="#b498ec", ylab="") > > > > barplot(height = df$Percent[df$Sex == "Males"], add = TRUE, axes = F, > > col="#f8bb85", ylab="", > > names.arg=c("18-29", "30-44", "45-59", "60+")) > > > > axis(side=2, at = seq(-35,35,by=5), > > labels=format(abs(seq(-35,35,by=5)), scientific=F), > > cex.axis=0.7) > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at 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. >[[alternative HTML version deleted]]
Use plot(NA, xlim=c(0, 5), ylim=c(-35, 35), type="n", axes=FALSE, ann=FALSE) to set up the length of the y axis instead of your first plot command. ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Jim Lemon Sent: Wednesday, March 15, 2017 9:09 PM To: Jen <plessthanpointohfive at gmail.com> Cc: r-help mailing list <r-help at r-project.org> Subject: Re: [R] force axis to extend Hi Jen, It seems way too simple, but does this work? axis(side=2,at=seq(-35,35,by=5),cex.axis=0.7) You may want to consider using a pyramid plot for this. Jim On Thu, Mar 16, 2017 at 11:45 AM, Jen <plessthanpointohfive at gmail.com> wrote:> Hi, I'm creating a couple of mirrored bar plots. Below is data and code > for one. > > My problem is that I need the axis to go from -35 to 35 by 5. I can't get > that to happen with the code below. I need it so all my plots are on the > same scale. > > How can I do that using barplot? For reasons, I can't use ggplot or > lattice. > > Thanks, > > Jen > > > > df <- data.frame(matrix(c( > '18-29', 'Females', 23.221039, > '30-44', 'Females', 16.665565, > '45-59', 'Females', 7.173238, > '60+', 'Females', 4.275979, > '18-29', 'Males', -22.008875, > '30-44', 'Males', -15.592936, > '45-59', 'Males', -7.312195, > '60+', 'Males', -3.750173), > nrow=8, ncol=3, byrow=T, > dimnames=list(NULL, c("Age", "Sex", "Percent")))) > > df$Percent <- as.numeric(as.character(df$Percent)) > > midf <- barplot(height = df$Percent[df$Sex == "Females"]) > > # distribution of men and women with solid fill > > plot(c(0,5),range(df$Percent),type = "n", axes=FALSE, ann=F) > > barplot(height = df$Percent[df$Sex == "Females"], add = TRUE,axes = FALSE, > col="#b498ec", ylab="") > > barplot(height = df$Percent[df$Sex == "Males"], add = TRUE, axes = F, > col="#f8bb85", ylab="", > names.arg=c("18-29", "30-44", "45-59", "60+")) > > axis(side=2, at = seq(-35,35,by=5), > labels=format(abs(seq(-35,35,by=5)), scientific=F), > cex.axis=0.7) > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.______________________________________________ R-help at 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.