2012-07-04 28 views
117

データのプロットを生成していますが、目盛りの数が少なすぎます。精度がになっています。軸目盛の数を増やす

ggplot2の軸ダニの数を増やす方法はありますか?

私はggplotに軸のティックとしてベクトルを使用するように指示できますが、私が望むのは、すべてのデータに対してティックの数を増やすことです。言い換えれば、データからダニ番号を計算したいのです。

おそらくggplotは内部的にアルゴリズムを使っていますが、それがどのように機能しているかわかりませんでした。

答えて

123

scale_x_continuousおよび/またはscale_y_continuousを変更することで、ggplotsのデフォルトのスケールを上書きできます。たとえば:

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 

ggplot(dat, aes(x,y)) + 
    geom_point() 

はあなたにこれを与える:

enter image description here

そしてスケールはあなたにこのような何かを与えることができますオーバーライド:あなたがしたい場合は

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) + 
    scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1)) 

enter image description here

を特定の部分を単にズームインするプロットのそれぞれxlim()ylim()を見てください。良い洞察はまた、他の議論を理解するためにhere見つけることができます。

+2

実際には、 'by'引数を数値の異なる尺度に「一般化する」ことがポイントになります。つまり、このデータの範囲がc(-3,3)の値は0.5ですが、それは良い結果ではありません範囲がc(0,5000)のデータの範囲。それを計算する関数はありますか? –

+1

@JoãoDaniel - ggplotはこれで自動的にまともな仕事をします。満足のいく結果が得られない場合は、別のものを提供する機能が組み込まれているかどうかはわかりません。あなたが望む細部のレベルはあなたのプロットに特有ですが、パターンを特定するためにいくつかのテストケースと指定された詳細レベルを考えるかもしれません。これがboxplotなら 'max-min/30'かなり一般的な "バケツ"サイズです...それはあなたのための良い出発点かもしれません。 – Chase

+2

時系列の月のようなx軸のカテゴリ値についてはどうですか? –

53

scaleに関数引数を指定できます.ggplotはティックの位置を計算する関数 を使用します。

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
number_ticks <- function(n) {function(limits) pretty(limits, n)} 

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks=number_ticks(10)) + 
    scale_y_continuous(breaks=number_ticks(10)) 
を使用でき
+72

独自の関数 'number_ticks'を作成する必要はありません。これは 'pretty_breaks {scales}'で既に実装されています。したがって: 'ggplot(DAT、AES(X、Y))+ geom_point()+ scale_x_continuous(切れ目=のpretty_breaks(N = 10))+ scale_y_continuous(ブレーク=のpretty_breaks(N = 10))' –

+10

@ Daniel Krizian:1)require(scales)2が必要です。これは私の休憩が科学の表記法に現れないように思われるので、1e6は1000000に変更されますか? – smci

+5

'scales'パッケージを使わずにベースRの' pretty'を使うことができます。ちょうど引数として値を指定してください。例: '(breaks = pretty(dat $ x、n = 10))' – Molx

76

ビルトインpretty機能:

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) + 
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) 

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = pretty(dat$x, n = 10)) + 
scale_y_continuous(breaks = pretty(dat$y, n = 10)) 

Daniel Krizian's commentに基づいて、あなたはまた、自動的にインポートされscalesライブラリーからpretty_breaks機能を使用することができます

あなたがしなければならないことは、必要なダニの数を挿入することだけです。

+6

これは明らかに最高の答えです! gtplは既に 'scales'をインポートしますが、あなたの名前空間に関数を追加しません。したがって、インポートせずに 'scales :: pretty_breaks(n = 10)'と呼ぶことができます。 – while

1

ビニングまたは離散スケールx軸データ用加え、

ggplot(dat, aes(x,y)) + 
geom_point() + 
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05)) 

ワークス(すなわち、必要ではない丸め)。

関連する問題