Using geom_text to label outlying points of scatter plot. By definition, these points tend to be close to the canvas edges: there is usually at least one word that overlaps
I'm sure someone could come up with a way to program this a bit faster, but here's an answer that could be used especially with multiple facets that all have different ranges - I modified the data.frame to have two facets on different x and y scales:
df <- data.frame(word = c("bicycle", "tricycle", "quadricycle"),
n.wheels = c(2,3,4, .2, .3, .4),
utility = c(10,6,7, 1, .6, .7),
facet = rep(c("one", "two"), each = 3))
Then, I create a dummy data frame that determines the breadth of the range x and y for each facet (e.g., diff(range(n.wheels))), divides that breadth by a suitable number (depending on the length of your labels, I chose 8), and adds that padding to the minimum and maximum x- and y-value for each facet:
pad <- rbind(ddply(df, .(facet), summarize,
n.wheels = min(n.wheels) - diff(range(n.wheels))/8,
utility = min(utility) - diff(range(utility))/8),
ddply(df, .(facet), summarize,
n.wheels = max(n.wheels) + diff(range(n.wheels))/8,
utility = max(utility) + diff(range(utility))/8))
pad$word <- NA
Then, you can add that layer to your plot with the colour set as NA:
ggplot(data=df, aes(x=n.wheels, y=utility, label = word)) +
geom_text() +
geom_point(data = pad, aes(x = n.wheels, y = utility), colour = NA) +
facet_wrap(~facet, ncol = 1, scales = "free")
Result: a reproducible, "automated" plot without cut-off labels (you may choose later to alter the scales to be prettier...)