Подтвердить что ты не робот

Текст влево и вправо выравнивает ось с точным интервалом между

У меня есть ярлыки оси y. Я хочу иметь одинаковый интервал. Этикетки состоят из двух переменных, и я хотел бы установить правильное расстояние между левыми переменными, выравнивание по левому краю и правая переменная выравнивается вправо. Я предположил, что это тривиальная задача, и на самом деле это в data.frame легко, используя функции заполнения строки из пакета stringi. Однако график не имеет желаемого выравнивания.

library(stringi)
library(tidyverse)

paster <- function(x, y, fill = ' '){
    nx <- max(nchar(x))
    ny <- max(nchar(y))
    paste0(
        stringi::stri_pad_right(x, nx, fill),
        stringi::stri_pad_left(y, ny, fill)
    )
}

plot_dat <- mtcars %>%
    group_by(gear) %>%
    summarize(
        n = n(),
        drat = mean(drat)
    ) %>%
    mutate(
        gear = case_when(
            gear == 3 ~ 'three and free', 
            gear == 4 ~ 'four or more',  
            TRUE ~ 'five'
        ),
        label = paster(gear, paste0(' (', n, ')'))
    )

plot_dat

## # A tibble: 3 x 4
##             gear     n     drat               label
##            <chr> <int>    <dbl>               <chr>
## 1 three and free    15 3.132667 three and free (15)
## 2   four or more    12 4.043333 four or more   (12)
## 3           five     5 3.916000 five            (5)

plot_dat %>%
    ggplot(aes(x = drat, y = label)) +
        geom_point() 

дает:

введите описание изображения здесь

Я хочу:

введите описание изображения здесь

4b9b3361

Ответ 1

Ваши текстовые строки хорошо распределены на основе моноширинного шрифта (который используется в консоли R).

Установка семейства шрифтов метки оси на моноширинный шрифт даст правильное выравнивание:

ggplot(mtcars,
       aes(x = drat, y = label)) +
  geom_point() +
  theme(axis.text.y = element_text(family = "mono"))

график с правильно выровненными метками оси y

(Не самый красивый вид, я знаю... Но у вас есть основная идея. Я не очень много работал с шрифтами в R, и это единственный моноширинный шрифт, о котором я могу сейчас подумать.)