R ggplot и фасет сетка: как управлять разрывами оси x

. Я пытаюсь построить график изменения временного ряда для каждого календарного года с помощью ggplot, и у меня возникают проблемы с точным контролем. оси абсцисс.Если я не использую scale = "free_x" , то я получаю ось x, которая показывает несколько лет, а также год, о котором идет речь, например:

Facet grid plot with common x-axis

Если я использую scale = "free_x" то, как и следовало ожидать, я получаю метки с отметками для каждого графика, и в некоторых случаях они зависят от графика, что мне не нужно:

Facet grid plot with free x-axis

Я предпринял различные попытки определить x -axis с использованием scale_x_date и т. д., но безуспешно. Поэтому мой вопрос:

Q. Как я могу контролировать разрывы и метки оси x на сетке аспектов ggplot, чтобы ось x (временного ряда) была идентична для каждого аспекта, отображалась только в нижней части панели и отображалась в виде месяцев в формате 1, 2, 3 и т. Д. Или как «Янв», «Фев», «Мар»?

Следующий код:

require(lubridate)
require(ggplot2)
require(plyr)

# generate data
df <- data.frame(date=seq(as.Date("2009/1/1"), by="day", length.out=1115),price=runif(1115, min=100, max=200))
# remove weekend days
df <- df[!(weekdays(as.Date(df$date)) %in% c('Saturday','Sunday')),]
# add some columns for later
df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df$month <- as.numeric(format(as.Date(df$date), format="%m"))
df$day <- as.numeric(format(as.Date(df$date), format="%d"))

# calculate change in price since the start of the calendar year
df <- ddply(df, .(year), transform, pctchg = ((price/price[1])-1))

p <- ggplot(df, aes(date, pctchg)) +
  geom_line( aes(group = 1, colour = pctchg),size=0.75) + 
  facet_wrap( ~ year, ncol = 2,scale="free_x") +
  scale_y_continuous(formatter = "percent") +
  opts(legend.position = "none")

print(p)
14
задан SlowLearner 21 January 2012 в 07:27
поделиться