Я хотел бы разделить заголовок на две части, которые выровнены по левому / правому краю соответственно. Следующий код создает два текстовых блока и использует arrangeGrob() для упорядочивания графика. Но похоже, что в arrangeGrob() нет параметров для выравнивания гробов. Как я могу выровнять grobs1 слева от графика, а и grobs2 справа от графика? Спасибо.

    p <- ggplot()

    grobs1 <- grobTree(
      gp = gpar(fontsize = 14), 
      textGrob(label = "Left", name = "title1",
               x = unit(2.5, "lines"), y = unit(0, "lines"), 
               hjust = 0, vjust = 0),
      textGrob(label = " left", name = "title2",
               x = grobWidth("title1") + unit(2.5, "lines"), y = unit(0, "lines"),
               hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold"))
      )

    grobs2 <- grobTree(
      gp = gpar(fontsize = 14), 
      textGrob(label = "Right", name = "title1",
               x = unit(0, "lines"), 
               y = unit(0, "lines"),
               hjust = 0, vjust = 0),
      textGrob(label = " right", name = "title2",
               x = grobWidth("title1") +unit(0, "lines"), 
               y = unit(0, "lines"),
               hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold"))
    )

    gg <- arrangeGrob(p, top = arrangeGrob(grobs1, grobs2, ncol = 2), padding = unit(1, "line"))
    grid.newpage()
    grid.draw(gg)
1
cccfran 24 Ноя 2019 в 01:15

1 ответ

Лучший ответ

Два аргумента функции textGrob могут быть полезны для перемещения текста по горизонтали: just и hjust. Вы можете попытаться отрегулировать эти значения, чтобы получить то, что вам нужно. Кстати, я предполагаю, что вы использовали пакет gridExtra. Я внес только некоторые изменения в just и hjust вашего исходного кода. Я мог зайти слишком далеко, чтобы сдвинуть текст right вправо с помощью hjust = -5, и just = "right" может быть достаточно.

library(gridExtra)
library(grid)
library(ggplot2)

p <- ggplot()
    grobs1 <- grobTree(
    gp = gpar(fontsize = 14), 
    textGrob(label = "Left", name = "title1",
             x = unit(2.5, "lines"), y = unit(0, "lines"), 
             just = "left", hjust = 0, vjust = 0),
    textGrob(label = " left", name = "title2",
             x = grobWidth("title1") + unit(2.5, "lines"), y = unit(0, "lines"),
             just = "left", hjust = 0, vjust = 0, gp = gpar(col = "red", fontface = "bold"))
  )

  grobs2 <- grobTree(
    gp = gpar(fontsize = 14), 
    textGrob(label = "Right", name = "title1",
             x = unit(0, "lines"), 
             y = unit(0, "lines"),
            just = "right", 
            hjust = -5, 
            vjust = 0),
    textGrob(label = " right", name = "title2",
             x = grobWidth("title1") +unit(0, "lines"), 
             y = unit(0, "lines"),
             just = "right", 
             hjust = -5, 
             vjust = 0, gp = gpar(col = "red", fontface = "bold"))
  )

  gg <- arrangeGrob(p, top = arrangeGrob(grobs1, grobs2, ncol = 2), padding = unit(1, "line"))
  grid.newpage()
  grid.draw(gg)

enter image description here

3
Zhiqiang Wang 24 Ноя 2019 в 02:32