R:ggplot距离公式

3

我想在使用ggplot绘制散点图时绘制等值线,但我无法正确使用stat_function

等值线基于距离公式:

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

这将涉及到IT技术,下面是需要翻译的内容:

看起来会像同心圆,但中心会是图表的原点:

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返回了以下错误:

'stat_function()'中的计算失败:参数“y”丢失,没有默认值

我应该如何正确提供x和y值给stat_function,以便它绘制一个通用的距离公式图,其中心位于原点?


2
stat_function 只能处理计算 y 值的函数。您需要重新排列公式,使其成为一个 y = f(x) 的函数。 - Roland
1个回答

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


谢谢,这很完美!我该如何将光栅颜色更改为来自viridis的不同调色板?我不熟悉::运算符。 - la_leche
只需避免首先使用library(viridis)。请参阅帮助页面和选项参数以更改调色板。 - Axeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接