Пакет сетки R: Как создать текстовый гроб с несколькими цветами и расположить его в центре области просмотра - PullRequest
0 голосов
/ 28 февраля 2020

Мне нужно что-то вроде следующего, но с разным цветом для каждого слова в строке:

library(grid)

grid.newpage()
pushViewport(viewport(width = unit(5, 'cm'), height = unit(5, 'cm')))
grid.rect()
grid.text(label = 'Hello, World!')

Я пытался создать отдельные гроб для каждого сегмента, а затем сгруппировать их вместе, но я не могу понять, Как расположить результат в центре области просмотра:

grid.newpage()
pushViewport(viewport(width = unit(5, 'cm'), height = unit(5, 'cm')))
grid.rect()

grouped_grobs <-
    gList(textGrob(label = 'Hello',
                   x = unit(0.0, 'npc'),
                   y = unit(0.5, 'npc'),
                   just = c('left', 'center'),
                   gp = gpar(col='red')),
          textGrob(label = ',',
                   x = unit(1, 'strwidth', data = 'Hello'),
                   y = unit(0.5, 'npc'),
                   just = c('left', 'center'),
                   gp = gpar(col='black')),
          textGrob(label = 'World',
                   x = unit(1, 'strwidth', data = 'Hello, '),
                   y = unit(0.5, 'npc'),
                   just = c('left', 'center'),
                   gp = gpar(col='blue')),
          textGrob(label = '!',
                   x = unit(1, 'strwidth', data = 'Hello, World'),
                   y = unit(0.5, 'npc'),
                   just = c('left', 'center'),
                   gp = gpar(col='black')))

grid.draw(grouped_grobs)

Я пытался измерить ширину gList, я также пытался использовать gTree, но почему-то я застрял в этой, казалось бы, простой задаче.

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 28 февраля 2020

Рисовать цветной текст намного проще с пакетом gridtext. Например

grid.newpage()
pushViewport(viewport(width = unit(5, 'cm'), height = unit(5, 'cm')))
grid.rect()

grid.draw(gridtext::richtext_grob(text = '<span style="color:red">Hello</span>, <span style="color:blue">World</span>!',
             x = unit(0.5, 'npc'),
             y = unit(0.5, 'npc'),
             hjust=.5))

Вернет

enter image description here

...