I have a plot whose labels are factors of the form "1990-2012". They are too long and / or too many, and they overlap.

I would like to print each label in two lines and break it after a hyphen, something like this:

In situations where splitting labels into two parts will still be insufficient, I would also like to know how to print only every other label.
The limitation that I have is that the marking must be done "in place" without pre-processing the data.frame and / or shortcuts, although the user-defined function used in the ggplot call will be fine.
Here is the criss-cross pattern (cannot be changed):
df <- structure(list(Period = structure(1:13, .Label = c("0-1000", "1000-1500", "1500-1700", "1700-1820", "1820-1913", "1913-1950", "1950-1970", "1970-1990", "1990-2012", "2012-2030", "2030-2050", "2050-2070", "2070-2100"), class = "factor"), value = c(0.000168759866884916, 0.000989913144738397, 0.00159894629454382, 0.0045594248070473, 0.00585564273031225, 0.00932876890888812, 0.0191066122563939, 0.0183146076484786, 0.0130117469870081, 0.00923670910453378, 0.00560791817163286, 0.00272731553972227, 0.00149387241891397 ), variable = c("World", "World", "World", "World", "World", "World", "World", "World", "World", "World", "World", "World", "World")), .Names = c("Period", "value", "variable"), row.names = c(NA, -13L), class = "data.frame")
Here is ggplot:
library(ggplot2) p <- ggplot(data = df, aes(x = Period, y = value, group = variable)) + geom_line() + theme_bw()
The following actions will work if I had a space after the hyphen:
library(stringr) p + scale_x_discrete(labels = function(x) str_wrap(x, width = 4))
[The two lines above were used to create a second plot after I manually changed the data structure to add a space after dividing the date, in other words, after I cheated]
The following approach for printing fewer labels usually works, but does not work here:
library(scales) p + scale_x_discrete(breaks = pretty_breaks(n = 6))