2017-01-23 85 views
2

我想绘制使用ggplot散点图下的等倾线,但我无法弄清楚如何正确使用stat_functionR:ggplot距离公式

的等值线是基于距离公式:

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

和看起来像这些 同心圆,除了中心将是图的原点:

enter image description here

我到目前为止所尝试的是在ggplot内调用距离函数(注意:我使用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

如何正确喂养x和y的值stat_function,以便它绘制的距离公式的一般情节,与原点的中心?

+2

'stat_function'只能搞定计算ÿ功能。您需要将公式重新排列为函数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