Creating log-log plots in R is easy; simply add log = "xy" as a named
parameter to the call to plot().
The core of this example, creating the grid lines, was posted to the R-help list by Petr Pikal.
## Create a data frame with artificial data.
d.f <- data.frame( x = 1:100, y = 1:100 )
## Open a new default device.
get( getOption( "device" ) )()
## Plot the data, hiding the points for now to prevent the calls to
## abline() from drawing over the points.
plot( y ~ x, data = d.f, type = "n", log = "xy", main = "Log-log Plot" )
## Put grid lines on the plot, using a light blue color ("lightsteelblue2").
abline( h = seq( 0, 100, 10 ), lty = 3, col = colors()[ 440 ] )
abline( v = seq( 0, 100, 10 ), lty = 3, col = colors()[ 440 ] )
## Draw the points over the grid lines.
points( y ~ x, data = d.f )
## Redraw the plot box over the grid lines.
box()
The output is:
Log-log plot
Here’s another version, with more grid lines:
## Create a data frame with artificial data.
x <- 1:31
y <- x^2
d.f <- data.frame( x = x, y = y )
## Open a new default device.
get( getOption( "device" ) )()
## Plot the data, hiding the points for now to prevent the calls to
## abline() from drawing over the points.
plot(
y ~ x,
data = d.f,
type = "n",
log = "xy",
main = "Log-log Plot",
xlim = c( 1, 1000 ),
ylim = c( 1, 1000 ) )
## Put grid lines on the plot, using a light blue color ("lightsteelblue2").
abline(
h = c( seq( 1, 9, 1 ), seq( 10, 90, 10 ), seq( 100, 1000, 100 ) ),
lty = 3,
col = colors()[ 440 ] )
abline(
v = c( seq( 1, 9, 1 ), seq( 10, 90, 10 ), seq( 100, 1000, 100 ) ),
lty = 3,
col = colors()[ 440 ] )
## Draw the points over the grid lines.
points( y ~ x, data = d.f )
## Redraw the plot box over the grid lines.
box()
The output is:
Log-log plot