web-dev-qa-db-ja.com

Ggplot2での軸ラベルの回転と間隔

X軸がラベルが長い因子であるプロットがあります。おそらく理想的なビジュアライゼーションではありませんが、今のところ、これらのラベルを垂直になるように回転させたいと思います。私はこの部分を以下のコードで考え出しました、しかしあなたが見ることができるように、ラベルは完全に見えません。

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))

enter image description here

551

最後の行をに変更

q + theme(axis.text.x = element_text(angle = 90, hjust = 1))

デフォルトでは、回転しても、軸はテキストの中央に配置されます。あなたが+/- 90度回転させるとき、あなたは通常それを代わりにEdgeに整列させたいです:

alt text

上の画像は このブログ投稿 からのものです。

942
Jonathan Chang

目盛ラベルのテキストを完全に表示し、y軸ラベルと同じ方向に読むには、最後の行を次のように変更します。

q + theme(axis.text.x=element_text(angle=90, hjust=1))
76
e3bo

coord_flip()を使う

「R for Data Science」では、WickhamとGrolemundがこの問題について語っています。第3.8章のPosition Adjustmentsでは、次のように書いています。

coord_flip()はx軸とy軸を入れ替えます。水平ボックスプロットが必要な場合、これは便利です(たとえば)。長いラベルにも便利です。x軸に重ならずに収まるようにするのは難しいです。

これをあなたのプロットに適用して、+ coord_flip()ggplotに追加します。

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

qplot(cut,carat,data = diamonds, geom = "boxplot") +
  coord_flip()

enter image description here

そして今、超ロングタイトルは横に広がっていてとても読みやすいです!

66
Rich Pauloo

キャンバスの回転機能を導入して以来、私が提案しているものと同様の堅牢なソリューションが ggtern の最新バージョンで必要とされた代替ソリューションを提供したいと思います。

基本的には、角度(つまり度)と位置(つまりx、y、上または右のいずれか)の情報を指定してelement_textオブジェクトを返す関数を作成することによって、三角法を使用して相対位置を決定する必要があります。

#Load Required Libraries
library(ggplot2)
library(gridExtra)

#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
  angle     = angle[1]; 
  position  = position[1]
  positions = list(x=0,y=90,top=180,right=270)
  if(!position %in% names(positions))
    stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
  if(!is.numeric(angle))
    stop("'angle' must be numeric",call.=FALSE)
  rads  = (angle - positions[[ position ]])*pi/180
  hjust = 0.5*(1 - sin(rads))
  vjust = 0.5*(1 + cos(rads))
  element_text(angle=angle,vjust=vjust,hjust=hjust)
}

率直に言って、私は私の意見では、hjustvjust引数には 'auto'オプションをggplot2で利用できるようにすべきだと思います。

#Demonstrate Usage for a Variety of Rotations
df    = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
  ggplot(df,aes(x,y)) + 
    geom_point() + 
    theme(axis.text.x = rotatedAxisElementText(a,'x'),
          axis.text.y = rotatedAxisElementText(a,'y')) +
    labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)

これにより、次のようになります。

Example

21

ggpubr パッケージはデフォルトで正しいことをするショートカットを提供します(テキストを右揃え、中央揃えをテキストボックスに合わせる):

library(ggplot2)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
q <- qplot(cut, carat, data = diamonds, geom = "boxplot")
q + ggpubr::rotate_x_text()

Representx package (v0.2.1)によって2018-11-06に作成されました

GitHubで適切な引数名を検索しています。 https://github.com/search?l=R&q=element_text+angle+90+vjust+org%3Acran&type = Code

3
krlmlr