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]]