軸ティックの数を増やす


188

一部のデータのプロットを生成していますが、目盛りの数が少なすぎるため、読み取り精度を上げる必要があります。

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

軸ティックとしてベクトルを使用するようにggplotに指示できることは知っていますが、すべてのデータについて、ティックの数を増やしたいです。つまり、データからティック数を計算したいのです。

おそらくggplotはこれを内部的にいくつかのアルゴリズムで実行しますが、それがどのように行われるかを見つけることができず、必要に応じて変更します。

回答:


186

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

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

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

これを与える:

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

スケールをオーバーライドすると、次のような結果が得られます。

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

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

プロットの特定の部分を単純に「拡大」したい場合は、xlim()およびをylim()それぞれ見てください。他の議論を理解するための良い洞察もここにあります。


4
実際のポイントは、by引数を「一般化」することです。つまり、0.5は、範囲がc(-3,3)のこのデータには適していますが、範囲のデータには適していません。 c(0,5000)です。それを計算する関数はありますか?
ジョアン・ダニエル

3
@JoãoDaniel-これはggplotが適切な仕事を自動的に行うことを意味します。満足のいく結果が得られない場合、別の機能を提供する組み込み関数があるかどうかはわかりません。必要な詳細レベルはプロットに固有ですが、パターンを特定するためにいくつかのテストケースと指定した詳細レベルを検討する可能性があります...これが箱ひげ図の場合max-min/30、かなり一般的な「バケット」のようなものサイズ...しかし、それはあなたにとって良い出発点かもしれないし、そうでないかもしれません。
追跡

4
時系列の年間の月のようなx軸のカテゴリ値についてはどうですか?
スコットデイビス

3
@ScottDavisはリンクを見てください。使用できますscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel

coord_cartesian代わりにズームを使用する必要がありxlimます。stackoverflow.com/questions/25685185/...
QWR

166

Daniel Krizianのコメントに基づいて、自動的にインポートされるライブラリのpretty_breaks関数を使用することもできscalesます。

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

必要なティック数を挿入するだけですn


(データ変数を再度指定する必要があるため)少し役に立たない解決策として、組み込みpretty関数を使用できます。

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

16
これは明らかに最良の答えです!Btw ggplotはすでにインポートscalesしていますが、名前空間に関数を追加していません。したがって、インポートなしでそれらをとして呼び出すことができますscales::pretty_breaks(n = 10)
しばらく

63

関数の引数を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))

81
独自の関数を作成する必要はありませんnumber_ticks。これはすでにで実装されていますpretty_breaks {scales}。したがって: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
Daniel Krizian 2014年

11
@Daniel Krizian:1)必要require(scales)2)これにより、科学的表記法での改行が表示されないように見えるため、1e6は1000000に変更されますか?
smci 2014

6
パッケージprettyなしでベースRを使用できscales、値を引数として提供します。例:(breaks=pretty(dat$x, n=10))
Molx

@smci ggplot2が機能している場合は、スケールを使用できます。ggplot2はスケールなしでは機能しません。
クラウスウィルク

6

の次期バージョンv3.3.0にggplot2n.breaksscale_x_continuousおよびのブレークを自動的に生成するオプションがあります。scale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

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

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

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


4

さらに、

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

ビニングまたは離散スケーリングされたx軸データで機能します(つまり、丸めは必要ありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.