R установка промежутка между графиками на мультиплоте

Следуя предыдущему сообщению R Указав ширину панели ggplot2, я смог создать этот график:

введите описание изображения здесь

этим кодом.

Вы можете найти вывод dput (данные) по адресу http://ubuntuone.com/0Nlb97mOeDhSbFrbFKCeEG

Теперь мой вопрос: как удалить / уменьшить пробелы между графиками. Я нашел примеры с пакетом ggExtra, ggplot и facet, мультиплоты с такими параметрами, как plot.margin или panel.margin, но не смог найти, как их применить в моем случае.

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: Я только что заметил, что графики имеют разную ширину. Необходимо, чтобы они имели одинаковую ширину, чтобы они могли совместно использовать метки оси x из нижнего графика.


person pacomet    schedule 26.10.2011    source источник


Ответы (2)


Использование xlab(NULL) вместо xlab(" ") удалит некоторое пространство в нижней части каждого графика.

Использование opts(plot.margin = unit(c(0,0,0,0), "cm")) удалит небольшое пространство по краям.


Я думаю, что вы слишком усложнили ситуацию, создав 5 отдельных графиков и объединив их. Огранка намного проще.

mdatos <- melt(datos[, -1], id.vars = "dia")
(p_all <- ggplot(mdatos, aes(dia, value)) +
  geom_line(colour = "blue") +
  facet_grid(variable ~ ., scale = "free_y") +
  xlab("Day") +
  ylab(NULL) 
)

Панели графика различаются по ширине, потому что некоторые метки оси Y имеют трехзначные числа, а некоторые - только два. Либо измените форматирование оси Y, либо воспользуйтесь моим предложением по фасетированию.

person Richie Cotton    schedule 26.10.2011
comment
Привет, Ричи, я попробовал твое предложение и не заметил значительных изменений в сюжете. - person pacomet; 26.10.2011
comment
@pacomet: разница невелика. Включите историю сюжета (в окне сюжета RGui History - ›Recording) и Page Up / Down для сравнения. Или используйте фасетирование, которое даст вам минимальное пространство. - person Richie Cotton; 26.10.2011
comment
Как новичок, возможно, я слишком усложнил. Я создал отдельные графики для другой цели, а затем решил попробовать объединить. Я пробовал фасетирование раньше, как вы предлагаете из предыдущего поста, и у меня есть еще вопрос. Здесь ggplot использует geom_line для всех 5 графиков, но я хочу, чтобы нижний график использовал geom_bar (). Возможно ли это в таком случае? Спасибо еще раз. - person pacomet; 26.10.2011
comment
@pacomet: Различная геометрия в разных аспектах - достаточно большая проблема, и она заслуживает отдельного вопроса. - person Richie Cotton; 26.10.2011
comment
@pacomet: см. stackoverflow.com/questions/7903972/ - person Richie Cotton; 26.10.2011

Вы можете разметить и контролировать поля нескольких участков с помощью par и layout. Например:

  par (fig=c(0,1,0,1), # Figure region in the device display region (x1,x2,y1,y2)
       omi=c(0,0,0.3,0), # global margins in inches (bottom, left, top, right)
       mai=c(0.1,0.1,0.3,0.1)) # subplot margins in inches (bottom, left, top, right)
  layout(matrix(1:4, 2, 2, byrow = TRUE))
person Itamar    schedule 26.10.2011
comment
Для базовой графики да. Это не будет работать для графиков на основе сетки, подобных тем, которые созданы в ggplot2. - person Richie Cotton; 26.10.2011