798

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))

ここに画像の説明を入力してください

4

8 に答える 8

1325

最後の行をに変更します

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

デフォルトでは、軸は回転してもテキストの中央に配置されます。+/- 90度回転する場合、通常は代わりにエッジに位置合わせする必要があります。

代替テキスト

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

于 2009-08-25T22:36:04.047 に答える
118

使用するcoord_flip()

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

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

ここに画像の説明を入力してください


追加str_wrap()

# wrap text to no more than 15 spaces
library(stringr)
diamonds$cut2 <- str_wrap(diamonds$cut, width = 15)
qplot(cut2, carat, data = diamonds, geom = "boxplot") +
  coord_flip()

ここに画像の説明を入力してください


R for Data Scienceの3.9章で、WickhamとGrolemundはこの正確な質問について話します。

coord_flip()x軸とy軸を切り替えます。これは(たとえば)水平の箱ひげ図が必要な場合に便利です。長いラベルにも役立ちます。x軸に重ならないようにラベルを合わせるのは困難です。

于 2017-08-01T02:29:00.983 に答える
98

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

q + theme(axis.text.x=element_text(angle=90, hjust=1))
于 2010-12-20T04:24:57.717 に答える
78

ggplot 3.3.0guide_axis(angle = 90)(へのguide引数として、scale_..またはへのx引数として)を提供することによってこれを修正しますguides

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

ggplot(diamonds, aes(cut, carat)) +
  geom_boxplot() +
  scale_x_discrete(guide = guide_axis(angle = 90)) +
  # ... or, equivalently:
  # guides(x =  guide_axis(angle = 90)) +
  NULL

議論の文書angleから:

theme()/ element_text()で角度を設定するのと比較して、これはいくつかのヒューリスティックを使用して、おそらく必要なhjustとvjustを自動的に選択します。


あるいは、ラベルを垂直にかわすことによってオーバープロットの問題を克服するために guide_axis(n.dodge = 2)(へのguide引数として、scale_..またはへのx引数として)提供します。guidesこの場合は非常にうまく機能します。

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

ggplot(diamonds, aes(cut, carat)) + 
  geom_boxplot() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  NULL

于 2020-03-12T08:58:37.770 に答える
31

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

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

#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)
}

率直に言って、私の意見では、角度を指定するときに、引数に「auto」オプションを使用できるようにする必要があると思いますggplot2hjustとにかくvjust、上記がどのように機能するかを示しましょう。

#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)

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

例

于 2016-05-02T09:32:35.303 に答える
11

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()

reprexパッケージ(v0.2.1)によって2018-11-06に作成されました

関連する引数名のGitHub検索で見つかりました:https ://github.com/search?l = R&q = element_text + angle + 90 + vjust + org%3Acran&type = Code

于 2018-11-06T22:23:20.540 に答える
6

時代遅れ-より簡単なアプローチについては、この回答を参照してください


追加の依存関係なしで読み取り可能なxティックラベルを取得するには、次を使用します。

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

これにより、目盛りラベルが反時計回りに90度回転し、端(hjust = 1)で垂直方向に、対応する目盛り(vjust = 0.5)で中心が水平方向に整列します。

完全な例:

library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))


垂直/水平位置揃えパラメータvjust/ hjustofelement_textはテキストに関連していることに注意してください。したがって、水平方向vjustの配置を担当します。

それがなければvjust = 0.5、次のようになります。

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

それがなければhjust = 1、次のようになります。

q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

何らかの(有線の)理由でティックラベルを時計回りに90°回転させたい場合(左から読み取れるように)、次を使用する必要がありますq + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1))

このすべては、この回答のコメントですでに説明されていますが、私はこの質問に頻繁に戻るので、コメントを読まずにコピーできる回答が必要です。

于 2020-03-11T16:25:04.913 に答える
0

代わりに、パッケージcoord_flip()を使用することもできます。ggstance利点は、グラフを他の種類のグラフと簡単に組み合わせることができ、さらに重要なことに、座標系に固定の縮尺比を設定できることです。

library(ggplot2)
library(ggstance)

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

ggplot(data=diamonds, aes(carat, cut)) + geom_boxploth()

reprexパッケージ(v0.3.0)によって2020-03-11に作成されました

于 2020-03-11T12:34:10.003 に答える