【问题标题】:R: ggplot distance formulaR:ggplot距离公式
【发布时间】:2017-01-23 06:57:29
【问题描述】:

我正在尝试使用 ggplot 在散点图下绘制等倾线,但我不知道如何正确使用 stat_function

等倾线基于距离公式:

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

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

到目前为止,我尝试的是像这样在 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,以便它绘制距离公式的通用图,中心位于原点?

【问题讨论】:

  • stat_function 只能处理计算 y 的函数。您需要将公式重新排列为函数 y = f(x)。

标签: r ggplot2


【解决方案1】:

对于任何有点复杂的事情,我避免使用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)

【讨论】:

  • 谢谢,这太完美了!如何将光栅颜色更改为与 viridis 不同的调色板?我不熟悉 :: 运算符。
  • :: 只是避免必须首先使用库(viridis)。请参阅帮助页面和选项参数以更改调色板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多