Добавить текст с несколькими переносами строк и курсивом к графику в R
Я хочу добавить несколько строк текста к сюжету, в котором некоторые слова выделены курсивом. Вот как должен выглядеть текст:
Курсив Некоторые
слова с
новые линии.
Более курсивный текст: пока
больше слов разделено
по новым линиям.
Курсив еще раз: и многое другое
текст с
новые линии.
Следующий код печатает одну строку текста курсивом:
plot(c(0, 2), c(0, 2))
text(1, 1, bquote(
paste(
italic("Italic Text:"),
" Some words with new lines. ",
italic("More italic text:"),
"Yet more words divided by new lines. ",
italic("Italics again:"),
"And more text with new lines.",
sep = ""
)
)
)
И это создает разрывы строк, но без курсива:
plot(c(0, 2), c(0, 2))
text(1, 1, "Italic Text: Some\nwords with\nnew lines.\n\nMore italic text: Yet\nmore words divided\nby new lines.\n\nItalics again: And more\ntext with\nnew lines.")
Но когда я пытаюсь разбить текст на строки и добавить курсив, символы новой строки приводят к странным результатам:
plot(c(0, 2), c(0, 2))
text(1, 1, bquote(
paste(
italic("Italic Text:"),
" Some\nwords with\nnew lines.\n\n",
italic("More italic text:"),
"Yet\nmore words divided\nby new lines.\n\n",
italic("Italics again:"),
"And more\ntext with\nnew lines.",
sep = ""
)
)
)
atop()
, как предлагается в других ответах, работает только с двумя строками.
Какой самый простой способ добавить несколько строк текста с несколькими словами курсивом к сюжету?
- В идеале, используя только базу R.
- И без мучительного позиционирования каждой строки текста в отдельности.
2 ответа
Мы можем использовать substitute()
комбинировать курсив и обычный текст. Чтобы выровнять текст по левому краю, мы можем использовать опцию pos=4
, тогда мы можем, мы можем возиться вместе, как это.
plot(c(0, 2), c(0, 2))
text(1, 1.9, substitute(paste(italic("Italic:"), " Some")), pos=4)
text(1, 1.7, "words with\nnew lines.", pos=4)
text(1., 1.4, substitute(paste(italic("More italic text:"), " Yet")), pos=4)
text(1, 1.21, "words with\nnew lines.", pos=4)
text(1., .9, substitute(paste(italic("Italics again:"), " And more")), pos=4)
text(1, .71, "text with\nnew lines.", pos=4)
https://stackru.com/images/5b43da3290a5d3c6bfccea0b4e b02a772d014597.png
Примечание: он немного сдвигается при экспорте. Я экспортировал рисунок с разрешением 500х500.
Как насчет этого?
plot(c(0, 10), c(0, 10))
text(
5,
7:2,
c(
expression(paste(italic("Italic Text:"), " Some")),
"\nwords with\nnew lines.",
expression(paste(italic("More italic text:"), " Yet")),
"\nmore words divided\nby new lines.",
expression(paste(italic("Italics again:"), "And more")),
"\ntext with\nnew lines."
)
)
я думаю, что происходит именно то, что упомянуто в виньетке дляtext
.
Если метки длиннее x и y, координаты перерабатываются до длины меток.
Это может быть причиной того, что вы получаете свой странный макет. Если вы измените мой7:2
код внутри text
, Я также получил ваш "испорченный" макет. Только центральный абзац по-прежнему выглядит "выключенным" - и я действительно не уверен, почему... Он выглядит так же, как и другие 2:-s
. Остальное выглядит как раз то, что вы ищете, я так понимаю? В любом случае, выглядит точно так же, как ваша вторая картинка, которую я использовал в качестве ориентира...
Я просто немного поработал с этим... если вы хотите выровнять по левому краю, просто добавьте pos = 4
внутри text
функция.
С этого момента вы сможете получить именно то, что хотите. Надеюсь это поможет!
Я не знаю курсив... но пакет, который я написал, может помочь вам:
devtools::install_github("igorkf/breaker")
library(breaker)
nbreak("Some text that you want and the italic stuff", n = 3)
#[1] "Some text that\nyou want and\nthe italic stuff"
#You can also use this with purrr:
purrr::map_chr(list("the first text that you want",
"the second text that you want",
"the third text that you want"),
~nbreak(.x, n = 2))
#[1] "the first\ntext that\nyou want" "the second\ntext that\nyou want" "the third\ntext that\nyou want"
Вы также можете сломать только один раз, используя loop = F