Шрифт ggplot2 :: geom_text как остальная часть графика - PullRequest
3 голосов
/ 18 мая 2019

Я получил следующие графики, используя приведенный ниже код:

enter image description here enter image description here enter image description here

library(ggplot2)
library(ggthemes)

p <- ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) + 
     geom_point() +
     theme_igray()
p
p + geom_text(mapping = aes(label = rownames(mtcars)))

p + geom_text(mapping = aes(label = rownames(mtcars)), family = "Times New Roman")

Шрифт для geom_text отличается от шрифта остальной части графика. Интересно, как получить такой же шрифт для geom_text, как шрифт остальной части графика.

1020 * Отредактированный *

sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.2 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggthemes_4.2.0 ggplot2_3.1.1 

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.1       rstudioapi_0.10  magrittr_1.5     tidyselect_0.2.5
 [5] munsell_0.5.0    colorspace_1.4-1 R6_2.4.0         rlang_0.3.4.9003
 [9] stringr_1.4.0    plyr_1.8.4       dplyr_0.8.1      tools_3.6.0     
[13] grid_3.6.0       gtable_0.3.0     withr_2.1.2      lazyeval_0.2.2  
[17] assertthat_0.2.1 tibble_2.1.1     crayon_1.3.4     purrr_0.3.2     
[21] vctrs_0.1.0.9003 zeallot_0.1.0    glue_1.3.1       labeling_0.3    
[25] stringi_1.4.3    compiler_3.6.0   pillar_1.4.0     scales_1.0.0    
[29] backports_1.1.4  pkgconfig_2.0.2 

Ответы [ 2 ]

4 голосов
/ 18 мая 2019

Я не уверен, почему шрифт для заголовков осей отличается от шрифта, полученного в результате вызова geom_text в ваших графиках.Если я запускаю ваш код, шрифты идентичны.

Согласно «ggplot2: Элегантная графика для анализа данных» Хедли Уикхэма (2-е изд.),

есть только 3 шрифтакоторые гарантированно работают везде: "sans", "serif" и "mono" (стр. 37)

Если вы используете следующий код, я думаю, что у вас будет один и тот же шрифт для осейи geom_text.

# solution for text family
### explicitely setting "family" twice
p <- ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) + 
  geom_point() +
  theme_igray(base_family = "sans")                                     ## <----

p + geom_text(mapping = aes(label = rownames(mtcars)), family = "sans") ## <----

С моей стороны это привело к следующему графику:

enter image description here

Со своей стороны я могу переключитьсяна любую комбинацию «sans», «serif» и «mono» для 2 типов текста на графике.

Пожалуйста, дайте мне знать, сработало ли это для вас.

2 голосов
/ 23 мая 2019

Это работает для вас? Я посмотрел на параметры темы, запустив theme_igray %>% View(), и увидел, что базовый размер text и цвет - 12 пт черного, но axis.text - grey30 и имеет относительный размер 0,8, то есть 9,6 пт. Цвет чуть светлее черного создает такой же внешний вид, как при использовании шрифта меньшего веса, по сравнению с полностью черным шрифтом.

По странным причинам, как отмечалось здесь , размеры текста в geom_text масштабируются с коэффициентом, близким к 0,353 [РЕДАКТИРОВАТЬ, см. Комментарий от @zeehio; было 5:14] по сравнению с размерами темы. С цветом и размером они должны совпадать.

library(ggplot2)
library(ggthemes)

p <- ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) + 
  geom_point() +
  theme_igray()
p
p + geom_text(mapping = aes(label = rownames(mtcars)),
              color = "gray30", size = 12 * 5/14 * 0.8)

enter image description here

Вот еще один пример. В моей системе (OSX 10.13, R 3.5.1) они совпадают, что я подтвердил с помощью фильтра «разница» в GIMP, показывая, что они выстраиваются в линию.

base_size = 36
ggplot(data = mtcars, mapping = aes(x = wt, y = mpg)) + 
  annotate("text", x = 1, y = 5*3:6, label = 5*3:6,
           color = "gray30", size = 12 * 0.353 * 0.8) +
  annotate("text", x = 10, y = 5*3:6, label = 5*3:6,
           color = "gray30", size = 12 * 0.353 * 0.8) +
  theme_igray() +
  theme(panel.grid = element_blank())

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...