web-dev-qa-db-ja.com

RバープロットのY軸スケールが短すぎます

バープロットを生成しようとしていますが、y軸のスケールが短すぎます。私のコードは次のとおりです。

_barplot(as.matrix(dat), log="y", ylim=c(10000,100000000), beside=TRUE,
        ylab = "Number of reads", col = c("gray","black","white"))
_

short y axis

(ylimのように)軸用のスペースを残しますが、実際の軸は埋めません。私は_?barplot_を試し、いくつかのことを試しました(グーグルでxpd = F, yaxs = c(10000,10000000,5)が機能するはずだと思っていましたが、機能しませんでした)。

私はそれが些細なことであることを知っていますが、それは実際に働くのではなく、まさに私が長い間立ち往生している種類の問題ですので、どんな助けも大歓迎です!

編集:入力者に乾杯!

最初はylimなしでプロットしましたが、さらに奇妙な軸になります(同じ問題があります)。実際に、より良い間隔の軸を与えるために、ylim値を選択しました。 original no ylim

データは次のとおりです。

_dat <- read.table(text="D2,D3n,D3m,D4n,D4m
21234722,34262282,31920464,25486357,20712943
35343,64403,22537,39934,46547
126646,312286,101105,81537,76944", header=TRUE, sep=",")
_

編集2:@DWinは正しかった-私はRを更新し、今ではうまくプロットされます-みんなありがとう!

26
jayemee

ylim badを設定しようとすると、悪い値を与えます。これにより、プロットのスケールが変更されます(ズームなど)。たとえば、次を参照してください。

par(mfrow=c(2,1))
tN <- table(Ni <- stats::rpois(100, lambda = 5))
r <- barplot(tN, col = Rainbow(20),ylim=c(0,50),main='long y-axis')
r <- barplot(tN, col = Rainbow(20),main='short y axis')

enter image description here

別のオプションは、axesなしでプロットし、axisusrを使用して手動で設定することです。

require(grDevices) # for colours
par(mfrow=c(1,1))
r <- barplot(tN, col = Rainbow(20),main='short y axis',ann=FALSE,axes=FALSE)
usr <- par("usr")
par(usr=c(usr[1:2], 0, 20))
axis(2,at=seq(0,20,5))

enter image description here

28
agstudy

最も簡単な解決策は、ylim範囲を指定することです。これを自動的に行うためのコードを次に示します(左デフォルト、右-調整済み):

_layout(t(c(1,2)))

# default y-axis
barplot(dat, beside=TRUE)

# automatically adjusted y-axis
barplot(dat, beside=TRUE, ylim=range(pretty(c(0, dat))))
_

enter image description here

トリックは、pretty()を使用することです。これは、提供されたデータのすべての値をカバーする間隔ブレークのリストを返します。最大戻り値が1)ラウンド数2)データの最大値より大きいことを保証します。

例では0が追加されましたpretty(c(0, dat)).