web-dev-qa-db-ja.com

グループ化された棒グラフRでX軸ラベルを45度回転

Rでグループ化された棒グラフのX軸ラベルを45度回転するにはどうすればよいですか?

私は提案された解決策を試しました here が非常に厄介なものになりました、ラベルが複数回追加されているようです(データのプライバシーを保護するために軸部分のみを表示しています)。 enter image description here

この解決策 (gridBase)も私には失敗しました。何らかの理由で次のエラーが発生します。

「トップレベルのビューポートをポップできません(グリッドとグラフィックスの出力が混在していますか?)」

PS。ほとんどの人がRベースで この解決策 を推奨しているようですが、参照しているデータがわからないため、私もそれで困っています(新しいコマンドラインを理解するには、ある種のサンプルデータセットが必要です) ...)。

バープロットがグループ化されたバープロットであるため、これらのソリューションは機能しませんか?それともそれはうまくいくはずですか?どんな提案も歓迎します、私はかなり長い間行き詰まっています。ありがとうございました。

[編集]リクエストに応じて、上記の画像を生成するために使用したコードを追加しています(text()ソリューションの1つに基づく):

data <- #this is a matrix with 4 columns and 20 rows;
        #colnames and rownames are specified.
        #the barplot data is grouped by rows

lablist <- as.vector(colnames(data))

barplot(data, beside=TRUE, col=c("darkred","red","grey20","grey40"))
text(1:100, par("usr")[1], labels=lablist, srt=45, pos=1, xpd=TRUE)
8
biohazard

私はベースプロットに堪能ではないので、私の解決策はそれほど単純ではないかもしれません。ここではggplot2を使用する方が良いと思います。

enter image description here

def.par <- par(no.readonly = TRUE)

## divide device into two rows and 1 column 
## allocate figure 1  for barplot
## allocate figure 2 for barplot labels
## respect relations between widths and heights

nf <- layout(matrix(c(1,1,2,2),2,2,byrow = TRUE), c(1,3), c(3,1), TRUE)
layout.show(nf)

## barplot 
par(mar = c(0,1,1,1))
set.seed(1)
nKol <- 8  ## you can change here but more than 11 cols 
           ## the solution is not really readable
data <- matrix(sample(1:4,nKol*4,rep=TRUE),ncol=nKol)
xx <- barplot(data, beside=TRUE,
              col=c("darkred","red","grey20","grey40"))

## labels , create d ummy plot for sacles
par(mar = c(1,1,0,1))
plot(seq_len(length(xx)),rep(1,length(xx)),type='n',axes=FALSE)
## Create some text labels 
labels <- paste("Label", seq_len(ncol(xx)), sep = " ")
## Plot text labels with some rotation at the top of the current figure
text(seq_len(length(xx)),rep(1.4,length(xx)), srt = 90, adj = 1,
     labels = labels, xpd = TRUE,cex=0.8,srt=60,
     col=c("darkred","red","grey20","grey40"))

par(def.par)  #- reset to default
8
agstudy

最初の答えを試してください:

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

ただし、text()関数でcex = 1をcex = .8または.6に変更します。

text(cex=.6, x=x-.25, y=-1.25, labs, xpd=TRUE, srt=45)

あなたが投稿した写真では、ラベルが大きすぎるようです。 cexはこれらのラベルのサイズを設定します。

7
Stu

グループ化された棒グラフで同じ問題が発生しました。各グループの下にラベルが1つだけ必要だと思います。あなたはそれを明確に述べていないので、私はこれについて間違っているかもしれませんが、あなたのラベルは画像で繰り返されているので、これはそうです。その場合、テキスト関数にx変数を指定するときにcolMeansを適用する必要がありますが、Stuによって提案されたソリューションを使用できます。

x <- barplot(table(mtcars$cyl), xaxt="n")
labs <- paste(names(table(mtcars$cyl)), "cylinders")
text(cex=1, x=colMeans(x)-.25, y=-1.25, labs, xpd=TRUE, srt=45)
3