2017-01-23 11 views
2

ggplotを使用して散布図の下に等濃度線をプロットしようとしていますが、stat_functionを正しく使用する方法がわかりません。R:ggplot距離式

アイソクラインは、距離の式に基づいている:

sqrt((x1-x2)^2 + (y1-y2)^2) 

中心プロットの原点であろう除き、これら 同心円ようになります。

enter image description here

私が今まで試したことは、ggplot内のdistance関数をそう呼んでいることです(注:実際の問題で固定値があるので、x1 = 1とy1 = 1を使用します)

distance <- function(x, y) {sqrt((x - 1)^2 + (y - 1)^2)} 
ggplot(my_data, aes(x, y))+ 
    geom_point()+ 
    stat_function(fun=distance) 

が、Rがエラーを返した:

Computation failed in 'stat_function()': argument "y" is missing, with no default

それが原点に中心に、距離の式の一般的なプロットをプロットするようにどのように私は正しくstat_functionにxとyの値を養うのですか?

+2

'stat_function'はyのみを計算する機能を処理することができます。数式を関数y = f(x)に並べ替える必要があります。 – Roland

答えて

2

少し複雑なものについては、私はstat機能の使用を避けます。彼らは主に迅速な計算を目指しています。通常、xに基づいてyと計算されます。私はちょうど代わりstat_contourとデータおよびプロットを事前に計算します:

distance <- function(x, y) {sqrt((x - 1)^2 + (y - 1)^2)} 
d <- expand.grid(x = seq(0, 2, 0.02), y = seq(0, 2, 0.02)) 
d$dist <- mapply(distance, x = d$x, y = d$y) 

ggplot(d, aes(x, y)) + 
    geom_raster(aes(fill = dist), interpolate = T) + 
    stat_contour(aes(z = dist), col = 'white') + 
    coord_fixed() + 
    viridis::scale_fill_viridis(direction = -1) 

enter image description here

+0

ありがとう、これは完璧です!ラスターカラーをviridisとは異なるパレットに変更するにはどうすればよいですか?私は::演算子に慣れていません。 –

+0

::まず、ライブラリ(viridis)を使用する必要はありません。パレットを変更するには、ヘルプページとオプション引数を参照してください。 – Axeman