Darren Norris
2009-Jan-24 00:39 UTC
[R] ggplot2 - how to change location / position of wind rose axis labels?
Dear R users, First just want to say thank you to all for developing such a wonderful software and packages. I need to produce a wind rose plot. Tried with packages circular and plotrix and couldn't quite get what I want. Moved to package ggplot2 and it's going great. However stuck in how to move axis labels. I am using the wind rose from the help to learn how to do what I need (code example below). The plot produced has axis labels on top of the axis line (not sure if it's actually the plot or axis line...) - which means the labels are unclear for what I need to produce. How can I move the labels to be outside of the line? I have read the online book ( http://had.co.nz/ggplot2/book/ ), help, tried changing various theme and scale settings and searched the package website and mailing list ( http://had.co.nz/ggplot2/ ). If the answer is there I'm too stupid to see it - do I need to play with grobs? If so how? Any help much appreciated, Darren R version 2.8.1 (2008-12-22) i386-pc-mingw32 locale: LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252 attached base packages: [1] grid stats graphics grDevices utils datasets methods base other attached packages: [1] ggplot2_0.8.1 reshape_0.8.2 plyr_0.1.4 proto_0.3-8 #Using an example form the coord_polar help library(ggplot2) movies$rrating <- factor(round_any(movies$rating, 1)) movies$budgetq <- factor(chop(movies$budget, 4), labels = 1:4) doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) doh + geom_bar(width = 1) + coord_polar() #Now with my theme (hacked from theme_bw) getting close to what I need theme_bwdn<-function (base_size = 12) { structure(list(axis.line = theme_blank(), axis.text.x = theme_text(size = base_size * 1, lineheight = 0.9, vjust = 1), axis.text.y = theme_blank(), axis.ticks = theme_segment(colour = "black", size = 0.2), axis.title.x = theme_blank(), axis.title.y theme_blank(), axis.ticks.length = unit(0, "lines"), axis.ticks.margin = unit(0, "lines"), legend.background theme_rect(colour = NA), legend.key = theme_rect(colour = "grey80"), legend.key.size unit(1.2, "lines"), legend.text = theme_text(size = base_size * 0.8), legend.title = theme_text(size = base_size * 0.8, face = "bold", hjust = 0), legend.position = "right", panel.background = theme_rect(fill = "white", colour = NA), panel.border = theme_rect(fill = NA, colour = "grey50"), panel.grid.major = theme_line(colour = "black", size = 0.2), panel.grid.minor = theme_line(colour = "black", size = 0.5), panel.margin = unit(0.25, "lines"), strip.background theme_rect(fill = "grey80", colour = "grey50"), strip.label = function(variable, value) value, strip.text.x = theme_text(size = base_size * 0.8), strip.text.y = theme_text(size = base_size * 0.8, angle = -90), plot.background = theme_rect(colour = NA), plot.title = theme_text(size = base_size * 1.2), plot.margin unit(rep(0.5, 4), "lines")), class = "options") } awind<-doh + geom_bar(width = 1) + coord_polar() #produces the wind rose but how to move axis labels? awind + theme_bwdn() -- View this message in context: http://www.nabble.com/ggplot2---how-to-change-location---position-of-wind-rose-axis-labels--tp21635526p21635526.html Sent from the R help mailing list archive at Nabble.com.
hadley wickham
2009-Jan-29 15:34 UTC
[R] ggplot2 - how to change location / position of wind rose axis labels?
Hi Darren, Sorry for taking so long to get back to you - my hard drive died and it's taking me a while to get up and running again of backups etc. One solution to your problem is to draw the axis labels yourself: labels <- data.frame(rrating = 1:10, count = 19000) awind + opts(axis.text.x = theme_blank()) + geom_text(aes(label = rrating, y = count, fill = NULL), data = labels) Adjusting count as needed to get them in the right position. I'll think about how to do this better in general. Regards, Hadley On Fri, Jan 23, 2009 at 4:39 PM, Darren Norris <doon75 at hotmail.com> wrote:> > Dear R users, > First just want to say thank you to all for developing such a wonderful > software and packages. > > I need to produce a wind rose plot. Tried with packages circular and plotrix > and couldn't quite get what I want. Moved to package ggplot2 and it's going > great. However stuck in how to move axis labels. > > I am using the wind rose from the help to learn how to do what I need (code > example below). The plot produced has axis labels on top of the axis line > (not sure if it's actually the plot or axis line...) - which means the > labels are unclear for what I need to produce. > > How can I move the labels to be outside of the line? I have read the online > book ( http://had.co.nz/ggplot2/book/ ), help, tried changing various theme > and scale settings and searched the package website and mailing list ( > http://had.co.nz/ggplot2/ ). If the answer is there I'm too stupid to see it > - do I need to play with grobs? If so how? > > Any help much appreciated, > Darren > > R version 2.8.1 (2008-12-22) > i386-pc-mingw32 > > locale: > LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United > Kingdom.1252;LC_MONETARY=English_United > Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252 > > attached base packages: > [1] grid stats graphics grDevices utils datasets methods > base > > other attached packages: > [1] ggplot2_0.8.1 reshape_0.8.2 plyr_0.1.4 proto_0.3-8 > > > #Using an example form the coord_polar help > library(ggplot2) > movies$rrating <- factor(round_any(movies$rating, 1)) > movies$budgetq <- factor(chop(movies$budget, 4), labels = 1:4) > doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) > doh + geom_bar(width = 1) + coord_polar() > > #Now with my theme (hacked from theme_bw) getting close to what I need > > theme_bwdn<-function (base_size = 12) > { > structure(list(axis.line = theme_blank(), axis.text.x = theme_text(size > = base_size * > 1, lineheight = 0.9, vjust = 1), axis.text.y = theme_blank(), > axis.ticks = theme_segment(colour = "black", > size = 0.2), axis.title.x = theme_blank(), axis.title.y > theme_blank(), axis.ticks.length = unit(0, > "lines"), axis.ticks.margin = unit(0, "lines"), legend.background > theme_rect(colour = NA), > legend.key = theme_rect(colour = "grey80"), legend.key.size > unit(1.2, > "lines"), legend.text = theme_text(size = base_size * > 0.8), legend.title = theme_text(size = base_size * > 0.8, face = "bold", hjust = 0), legend.position = "right", > panel.background = theme_rect(fill = "white", colour = NA), > panel.border = theme_rect(fill = NA, colour = "grey50"), > panel.grid.major = theme_line(colour = "black", size = 0.2), > panel.grid.minor = theme_line(colour = "black", size = 0.5), > panel.margin = unit(0.25, "lines"), strip.background > theme_rect(fill = "grey80", > colour = "grey50"), strip.label = function(variable, > value) value, strip.text.x = theme_text(size = base_size * > 0.8), strip.text.y = theme_text(size = base_size * > 0.8, angle = -90), plot.background = theme_rect(colour = NA), > plot.title = theme_text(size = base_size * 1.2), plot.margin > unit(rep(0.5, > 4), "lines")), class = "options") > } > > awind<-doh + geom_bar(width = 1) + coord_polar() > > #produces the wind rose but how to move axis labels? > awind + theme_bwdn() > > > > > -- > View this message in context: http://www.nabble.com/ggplot2---how-to-change-location---position-of-wind-rose-axis-labels--tp21635526p21635526.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > 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. >-- http://had.co.nz/
Darren Norris
2009-Jan-29 18:19 UTC
[R] ggplot2 - how to change location / position of wind rose axis labels?
Many thanks Hadley, The solution you gave works well moving label locations within the area of the axis but does not quite provide what I was after. Apologies for the confusion - I've only been using ggplot2 it for a day..... Compare the bar chart (from previous example): awind<-doh + geom_bar(width = 1) This shows x axis, gap beneath the x axis providing a separation to tick lines with x axis labels below tick lines. The wind rose: awind<-doh + geom_bar(width = 1) + coord_polar() Does not have the same separation between x axis and labels. How do I move all labels outside of the axis area (e.g. move label 8 to the left, 3 to the right etc on the wind rose above)? Thanks again for all your support, Darren hadley wickham wrote:> Hi Darren, > > Sorry for taking so long to get back to you - my hard drive died and > it's taking me a while to get up and running again of backups etc. > > One solution to your problem is to draw the axis labels yourself: > > labels <- data.frame(rrating = 1:10, count = 19000) > > awind + > opts(axis.text.x = theme_blank()) + > geom_text(aes(label = rrating, y = count, fill = NULL), data = labels) > > Adjusting count as needed to get them in the right position. I'll > think about how to do this better in general. > > Regards, > > Hadley > > On Fri, Jan 23, 2009 at 4:39 PM, Darren Norris wrote: > >> Dear R users, >> First just want to say thank you to all for developing such a wonderful >> software and packages. >> >> I need to produce a wind rose plot. Tried with packages circular and plotrix >> and couldn't quite get what I want. Moved to package ggplot2 and it's going >> great. However stuck in how to move axis labels. >> >> I am using the wind rose from the help to learn how to do what I need (code >> example below). The plot produced has axis labels on top of the axis line >> (not sure if it's actually the plot or axis line...) - which means the >> labels are unclear for what I need to produce. >> >> How can I move the labels to be outside of the line? I have read the online >> book ( http://had.co.nz/ggplot2/book/ ), help, tried changing various theme >> and scale settings and searched the package website and mailing list ( >> http://had.co.nz/ggplot2/ ). If the answer is there I'm too stupid to see it >> - do I need to play with grobs? If so how? >> >> Any help much appreciated, >> Darren >> >> R version 2.8.1 (2008-12-22) >> i386-pc-mingw32 >> >> locale: >> LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United >> Kingdom.1252;LC_MONETARY=English_United >> Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252 >> >> attached base packages: >> [1] grid stats graphics grDevices utils datasets methods >> base >> >> other attached packages: >> [1] ggplot2_0.8.1 reshape_0.8.2 plyr_0.1.4 proto_0.3-8 >> >> >> #Using an example form the coord_polar help >> library(ggplot2) >> movies$rrating <- factor(round_any(movies$rating, 1)) >> movies$budgetq <- factor(chop(movies$budget, 4), labels = 1:4) >> doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) >> doh + geom_bar(width = 1) + coord_polar() >> >> #Now with my theme (hacked from theme_bw) getting close to what I need >> >> theme_bwdn<-function (base_size = 12) >> { >> structure(list(axis.line = theme_blank(), axis.text.x = theme_text(size >> = base_size * >> 1, lineheight = 0.9, vjust = 1), axis.text.y = theme_blank(), >> axis.ticks = theme_segment(colour = "black", >> size = 0.2), axis.title.x = theme_blank(), axis.title.y >> theme_blank(), axis.ticks.length = unit(0, >> "lines"), axis.ticks.margin = unit(0, "lines"), legend.background >> theme_rect(colour = NA), >> legend.key = theme_rect(colour = "grey80"), legend.key.size >> unit(1.2, >> "lines"), legend.text = theme_text(size = base_size * >> 0.8), legend.title = theme_text(size = base_size * >> 0.8, face = "bold", hjust = 0), legend.position = "right", >> panel.background = theme_rect(fill = "white", colour = NA), >> panel.border = theme_rect(fill = NA, colour = "grey50"), >> panel.grid.major = theme_line(colour = "black", size = 0.2), >> panel.grid.minor = theme_line(colour = "black", size = 0.5), >> panel.margin = unit(0.25, "lines"), strip.background >> theme_rect(fill = "grey80", >> colour = "grey50"), strip.label = function(variable, >> value) value, strip.text.x = theme_text(size = base_size * >> 0.8), strip.text.y = theme_text(size = base_size * >> 0.8, angle = -90), plot.background = theme_rect(colour = NA), >> plot.title = theme_text(size = base_size * 1.2), plot.margin >> unit(rep(0.5, >> 4), "lines")), class = "options") >> } >> >> awind<-doh + geom_bar(width = 1) + coord_polar() >> >> #produces the wind rose but how to move axis labels? >> awind + theme_bwdn() >> >> >> >> >> -- >> View this message in context: http://www.nabble.com/ggplot2---how-to-change-location---position-of-wind-rose-axis-labels--tp21635526p21635526.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ >> R-help@r-project.org mailing list >> 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]]