# ========================================================
# Data
# ========================================================
# setting seed for random numbers
set.seed(999)
# generate x and y
x = 0:18 + runif(19) + 0.5
y = 8 * sqrt(x/30) + runif(19) + 0.5
# generate errors
x_err = runif(19) * 0.5 + 0.1
y_err = runif(19) + 0.1
# ========================================================
# Plot
# ========================================================
# set graphic margins
op = par(mar = c(2, 2, 1, 1))
# call plot
plot.new()
# define plot window
plot.window(xlim = c(0, 20), ylim = c(0, 10))
# add axis
axis(side = 1, pos = 0, lwd.ticks = 0, labels = FALSE)
axis(side = 2, pos = 0, lwd.ticks = 0, labels = FALSE)
# add tick labels
mtext(seq(from=0, to=20, by=2), side = 1, line = -0.2,
at = seq(from=0, to=20, by=2))
mtext(seq(from=0, to=10, by=2), side = 2, line = -0.7,
at = seq(from=0, to=10, by=2), las = 2)
# add grid lines (don't use abline because it misbehaves)
segments(rep(0, 10), seq(from=0, to=10), rep(20, 10),
seq(from=0, to=10), col = "gray90")
segments(seq(from=0, to=20), rep(0, 10), seq(from=0, to=20),
rep(10, 10), col = "gray90")
# add points
points(x, y, pch = 20)
# vertical error bars
arrows(x0 = x, y0 = y - y_err, x1 = x, y1 = y + y_err, angle = 90,
col = "gray20", code = 3, length = 0.05, lwd = 0.4)
# horizontal error bars
arrows(x0 = x - x_err, y0 = y, x1 = x + x_err, y1 = y, angle = 90,
col = "gray20", code = 3, length = 0.05, lwd = 0.4)
# turn off graphic parameters
par(op)