Метки даты перекрываются при размещении нескольких графиков ggplot на одной странице - PullRequest
3 голосов
/ 14 июля 2010

Я пытаюсь разместить на странице несколько графиков временных рядов ggplot2 с помощью функцииrange () пакета gridExtra. К сожалению, я обнаружил, что метки оси X сдвинуты вместе; Похоже, что на график наносится то же количество меток оси X, что и на полностраничную диаграмму, хотя мои диаграммы занимают только 1/4 страницы. Есть лучший способ сделать это? Я бы предпочел не устанавливать вручную какие-либо точки, поскольку я буду иметь дело с большим количеством диаграмм, которые охватывают разные диапазоны дат и имеют разные частоты.

Вот пример кода, который повторяет проблему.

dfm <- data.frame(index=seq(from=as.Date("2000-01-01"), length.out=100, by="year"), 
    x1=rnorm(100), 
    x2=rnorm(100))
mydata <- melt(dfm, id="index")

pdf("test.pdf")
plot1 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot2 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot3 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot4 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
arrange(plot1, plot2, plot3, plot4, ncol=2, nrow=2)
dev.off()

Ответы [ 2 ]

5 голосов
/ 14 июля 2010

либо поверните метки оси

+ opts(axis.text.x=theme_text(angle=45, hjust=1))

Обратите внимание, что opts устарела в текущих версиях ggplot2 . Эта функциональность была перемещена в theme():

+ theme(axis.text.x = element_text(angle = 45, hjust = 1))

или разбавить ось X

+scale_x_datetime(major = "10 years")

для автоматического смещения меток, я думаю, что с функциейrange () нужно позаботиться (хотя я не знаю, как)

3 голосов
/ 14 июля 2010

Я написал эту функцию, чтобы она возвращала правильные разрывы главных осей, учитывая, что вы хотите установить определенное количество основных разрывов.

year.range.major <- function(df, column = "index", n = 5){
  range <- diff(range(df[,column]))
  range.num <- as.numeric(range)
  major = max(pretty((range.num/365)/n))

  return(paste(major,"years"))
}

Таким образом, вместо того, чтобы всегда фиксировать разрывы через 10 лет, получитсяфиксированное количество перерывов с хорошими интервалами.

+scale_x_date(major = year.range.major())

или

+scale_x_date(major = year.range.major(n=3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...