#r #ubuntu #plot #fonts #render
#r #ubuntu #график #шрифты #визуализация
Вопрос:
Обновление 2020-10-09: проблема не зависит от
{ggplot2}
, я привел более минимальный пример с некоторыми подробностями
Еще несколько недель назад у меня не было проблем с рендерингом и корректным отображением вывода графика с изменением символов в моноширинном пространстве. С тех пор, как несколько дней назад они больше не отображались.
Мне трудно понять, как отладить эту проблему. Может кто-нибудь предложить какие-то тесты или что-то другое, чтобы понять источник и, возможно, решить проблему?
Вот репрезентация из моей локальной системы:
library(showtext)
#> Loading required package: sysfonts
#> Loading required package: showtextdb
plot(1:10)
text(5, 8, "Some text in serif", family = "serif")
text(5, 5, "Some text in mono-spaced", family = "mono")
text(5, 2, "Some text in sans-serif", family = "sans")
showtext_auto()
plot(1:10)
text(5, 8, "Some text in serif", family = "serif")
text(5, 5, "Some text in mono-spaced", family = "mono")
text(5, 2, "Some text in sans-serif", family = "sans")
Создано 2020-10-09 пакетом reprex (версия 0.3.0)
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.0.2 (2020-06-22)
#> os Ubuntu 20.04.1 LTS
#> system x86_64, linux-gnu
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Europe/Rome
#> date 2020-10-09
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
#> backports 1.1.10 2020-09-15 [1] CRAN (R 4.0.2)
#> callr 3.4.4 2020-09-07 [1] CRAN (R 4.0.2)
#> cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.2)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.2)
#> curl 4.3 2019-12-02 [1] RSPM (R 4.0.2)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.2)
#> devtools 2.3.2 2020-09-18 [1] CRAN (R 4.0.2)
#> digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.2)
#> ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.2)
#> fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.2)
#> fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
#> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
#> highr 0.8 2019-03-20 [1] CRAN (R 4.0.2)
#> htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
#> httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
#> knitr 1.30 2020-09-22 [1] CRAN (R 4.0.2)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.2)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.2)
#> mime 0.9 2020-02-04 [1] CRAN (R 4.0.2)
#> pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
#> pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.2)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.2)
#> processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
#> ps 1.3.4 2020-08-11 [1] CRAN (R 4.0.2)
#> R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.2)
#> remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
#> rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2)
#> rmarkdown 2.4 2020-09-30 [1] CRAN (R 4.0.2)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.2)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
#> showtext * 0.9 2020-08-13 [1] RSPM (R 4.0.2)
#> showtextdb * 3.0 2020-06-04 [1] RSPM (R 4.0.2)
#> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
#> sysfonts * 0.8.1 2020-05-08 [1] RSPM (R 4.0.2)
#> testthat 2.99.0.9000 2020-10-01 [1] Github (r-lib/testthat@3b0b970)
#> usethis 1.6.3 2020-09-17 [1] CRAN (R 4.0.2)
#> withr 2.3.0 2020-09-22 [1] CRAN (R 4.0.2)
#> xfun 0.18 2020-09-29 [1] CRAN (R 4.0.2)
#> xml2 1.3.2 2020-04-23 [1] CRAN (R 4.0.2)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.2)
#>
#> [1] /home/cl/R/x86_64-pc-linux-gnu-library/4.0
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/lib/R/site-library
#> [4] /usr/lib/R/library
Системный шрифт
> X11Fonts()
$serif
[1] "-*-times-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$sans
[1] "-*-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$mono
[1] "-*-courier-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$Times
[1] "-adobe-times-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$Helvetica
[1] "-adobe-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$CyrTimes
[1] "-cronyx-times-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$CyrHelvetica
[1] "-cronyx-helvetica-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$Arial
[1] "-monotype-arial-%s-%s-*-*-%d-*-*-*-*-*-*-*"
$Mincho
[1] "-*-mincho-%s-%s-*-*-%d-*-*-*-*-*-*-*"
Спасибо
Комментарии:
1. примечание: использование «без» или «засечек» работает правильно…
2. Точно такая же проблема здесь, после обновления с Ubuntu 18.04 до 20.4…
3. Здесь та же проблема (на Xubuntu 20.04). Использование
family="monospace"
— это обходной путь, но не совсем доволен этим. При сохранении графика сpdf("plot.pdf"); par(family="mono"); plot(1); dev.off()
помощью then он работает просто отлично.4. FWIW работал для меня так же, как и в Ubuntu 20.10. Вероятно, «просто» функция установленных пакетов шрифтов. Когда я запускаю
dpkg -l | grep " fonts-" | wc -l
, я вижу, что установлено 163.5. Сравнивая мою старую систему 16.04 (где у меня нет этой проблемы) с системой 20.04, я не вижу никаких очевидных недостающих кандидатов. На самом деле, я вижу только 78 пакетов в моей старой системе и 142 в новой.
Ответ №1:
У меня была точно такая же проблема, также в Ubuntu 20.04 (после обновления с 18.04).
Что сработало для меня, так это использовать family="monospace"
(вместо family="mono"
).
Например:
plot(1:10)
text(5, 8, "Some text in serif", family = "serif")
text(5, 5, "Some text in mono-spaced", family = "monospace") ## instead of "mono"!
text(5, 2, "Some text in sans-serif", family = "sans")
Результат:
Комментарии:
1. Я не смог воспроизвести свою собственную проблему после полного восстановления системы, которое я сделал. В любом случае, если я попытаюсь использовать ваше решение, я получу два разных результата: т. Е. Теперь работают как «моно», так и «моноширинный», но это разные шрифты «фиксированной ширины»! Поэтому я не знаю, можно ли считать это решением моей первоначальной проблемы. Конечно, это может быть хорошим обходным путем.
Ответ №2:
Эта проблема обсуждалась в списке рассылки R-help:
https://stat.ethz.ch/pipermail/r-help/2021-January/469955.html
Подводя итог:
20.04 использует более свежую версию Pango, которая не поддерживает шрифты типа 1 на графических устройствах на базе Cairo.
X11.options()$type
показывает, какое устройство X11 используется. Это вероятно cairo
. В командной строке
fc-match Courier
вероятно, указывает на шрифт .pfb, в чем проблема.
Добавление следующего к ~/.config/fontconfig/fonts.conf
должно решить эту проблему:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match>
<test name="family">
<string>Courier</string>
</test>
<edit mode="assign" name="file">
<string>/usr/share/fonts/truetype/dejavu/ DejaVuSansMono.ttf</string>
</edit>
</match>
</fontconfig>
Замените ваш любимый (ttf / otf) моноширинный шрифт выше. Дважды проверьте, что
fc-match Courier
теперь указывает на этот шрифт. Не уверен, что это необходимо, но я также обновил кэш шрифтов:
fc-cache -r --verbose --really-force