[R] "lwd" gives different plotted line widths for Vertical and horizontal Lines when lwd= 2?
Pedro de Barros
pbarros at ualg.pt
Sun Jul 6 13:33:03 CEST 2008
Dear All,
I have been trying to add lines to the axis grobs of plots produced
with ggplot2.
The code I have used is below. It works, although I do not think it
is a really elegant way of doing what I want....
However, I am now noticing that when plotted, the width of the lines
in the axis are not the same as the line widths I get for the ticks
(the ticks get thicker lines). Also, when I build a function to do
the same conversion, I get different (thinner) line widths for the
x-axis I have been trying to find out why this is so, but I seem to
have met a dead-end.
#Test
library(ggplot2)
#Set the basic overall plot options
themePublish <-list(background.fill='white', grid.fill='white',
grid.colour='NA', grid.minor.colour='NA', axis.colour='black',
border.colour='NA')
ggtheme(themePublish)
#Generate the data
plotdata<-data.frame(x=1:10, y=runif(10))
#Build the ggplot object
ggPlotObject<-ggplot()
ggPlotObject<-ggPlotObject+layer(data=plotdata,
mapping=aes_string(x='x',y='y'),geom='point', stat='identity', size=4)
ggPlotObject<-ggPlotObject+ scale_y_continuous(limits=c(0,1), expand=c(0,0))
#################
#I define the following function
F.ggPlot.AddAxisLines<-function(ggPlotObject, col='black', lwd=2, lty='solid'){
###################################################################################################
# First, capture the ggPlot object as a gTree
ggPlotTree<-ggplot_plot(ggPlotObject)
#Get the parameters defined for the lines
LinePars <- gpar(col=col, lwd=lwd, lty=lty)
#Then, create the objects to add to the axes
YAxis.Line<-linesGrob(x=unit(c(1,1), 'npc'), y=unit(c(0,1), 'npc'),
vp='left_axis', name='YAxisLine', gp=LinePars)
XAxis.Line<-linesGrob(x=unit(c(0,1), 'npc'), y=unit(c(1,1), 'npc'),
vp='bottom_axis', name='XAxisLine', gp=LinePars)
#Add the grobs to this object
ggPlotTreeMod<-ggPlotTree
ggPlotTreeMod<-addGrob(ggPlotTreeMod, YAxis.Line, gPath('yaxis'), grep=TRUE)
ggPlotTreeMod<-addGrob(ggPlotTreeMod, XAxis.Line, gPath('xaxis'), grep=TRUE)
#Edit the properties of the ticks, to match those of the lines
ggPlotTreeMod<-editGrob(ggPlotTreeMod, gPath('ticks'), gp=LinePars,
grep=TRUE, global=TRUE)
#Output the new object
ggPlotTreeMod
}
# and then do
ggPlotTreeMod2 <- F.ggPlot.AddAxisLines(ggPlotObject)
grid.draw(ggPlotTreeMod2)
# I get different line thicknesses for the two axes
#However, if I do
ggPlotTreeMod3 <- F.ggPlot.AddAxisLines(ggPlotObject, lwd=3)
grid.draw(ggPlotTreeMod3)
# I get the same line thickness on both axes, but thicker ticks
I would really appreciate any pointer or hint.
Thanks,
Pedro
More information about the R-help
mailing list