2017-08-22 16 views
10

y軸のラベルがいくつかありますが、すべて同じ間隔にしたいと思います。ラベルは2つの変数で構成されています。左の変数と右の変数の間に正しい間隔を置いて、右の変数を右揃えにしたいと思います。私はこれを些細な作業であると仮定しました。実際には、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() 

与える:

enter image description here

を私がしたいことは次のとおりです。

enter image description here

+0

[R ggplotの左揃えの目盛りラベル](https://stackoverflow.com)/questions/30510653/left-align-tick-mark-l abels-in-r-ggplot) – neilfws

+0

はい私は質問のより慎重な読んですべてのことを実現しました:) – neilfws

+0

あなたがしたいのではなく、メインのy軸として 'n'を使用し、[セカンダリy軸] (http://ggplot2.tidyverse.org/reference/sec_axis.html)?プロット上のモノフォントの大きなファンではありません。 – zx8754

答えて

9

あなたのテキスト文字列をきれいに何Rである固定幅フォント(に基づいて間隔を置いて配置されていますコンソール使用)。 (きれいな私が知っている、見て...しかし、あなたが基本的な考え方を得ることはありませ

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

plot with properly aligned y axis labels

:等幅フォントに軸ラベルのフォントファミリを設定

は正しいアライメントが得られます。 R &のフォントではあまり働いていませんが、これは私が今考えることができる唯一のモノスペースフォントです)。

+5

'extrafont'パッケージを使用して、他の顔をプロットに使用できるようにします。そこにいくつかの素敵なモノスペースのものがあります。 – Brian

関連する問題