我有一个带有两个曲线定义的df,每个曲线定义包含两个点和一个曲率值。目标是使用ggplot2 geom_curve(或替代方法)绘制两条单独的曲线。

我可以使用以下命令生成预期的输出:

df <- data.frame(x = c(0,.2), y = c(0,.3), xend = c(1,.4), yend = c(1,.6), curvature = c(-.2,.4))
ggplot(df) + geom_curve(data = df[1, ], aes(x = x, y = y, xend = xend, yend = yend), curvature = df$curvature[1]) + geom_curve(data = df[2, ], aes(x = x, y = y, xend = xend, yend = yend), curvature = df$curvature[2])

r - 如何在 `curvature`  `ggplot2`函数中传递各个 `geom_curve`参数?-LMLPHP

但这并不是真正的解决方案,因为在我的实际情况下,我有更多的曲线(而且我不知道事先有多少条曲线)。

如何将单个curvature参数传递给geom_curve调用?

我试过:
df <- data.frame(x = c(0,0), y = c(0,0), xend = c(1,1), yend = c(1,1), curvature = c(-.2,.8))
library(ggplot2)
ggplot(df) + geom_curve(aes(x = x, y = y, xend = xend, yend = yend, curvature = curvature))

这会将两条曲线绘制在彼此的顶部,并引发其他警告:



所以我尝试了:
ggplot(df) + geom_curve(aes(x = x, y = y, xend = xend, yend = yend), curvature = curvature)

这会引发错误:



因此,我尝试显式传递curvature冒号:
ggplot(df) + geom_curve(aes(x = x, y = y, xend = xend, yend = yend), curvature = df$curvature)

这也会引发错误:



从@markus的解决方案中,我了解到我们可以将lists传递给ggplot对象,因此我尝试了:
ggplot(df) +
  lapply(df$curvature, function(i) {
    geom_curve(aes(x = x, y = y, xend = xend, yend = yend), curvature = i) }
  )

但这会用curvature两个参数绘制每条曲线:

r - 如何在 `curvature`  `ggplot2`函数中传递各个 `geom_curve`参数?-LMLPHP

如何为每一行分别传递curvature参数?

最佳答案

更新
您可以先拆分数据,然后使用lapply遍历结果列表,然后我们将其馈送到datageom_curve()参数

df2 <- data.frame(x = c(0,.2), y = c(0,.3), xend = c(1,.4), yend = c(1,.6), curvature = c(-.2,.4))
ggplot() +
  lapply(split(df2, 1:nrow(df)), function(dat) {
    geom_curve(data = dat, aes(x = x, y = y, xend = xend, yend = yend), curvature = dat["curvature"]) }
  )
r - 如何在 `curvature`  `ggplot2`函数中传递各个 `geom_curve`参数?-LMLPHP
原始ansewr
正如您已经注意到的,curvature并不美观。您可以将列表添加到ggplot(),以使其正常工作
df <- data.frame(x = c(0,0), y = c(0,0), xend = c(1,1), yend = c(1,1), curvature = c(-.2,.8))
ggplot(df) +
  lapply(df$curvature, function(i) {
    geom_curve(aes(x = x, y = y, xend = xend, yend = yend), curvature = i) }
    )
r - 如何在 `curvature`  `ggplot2`函数中传递各个 `geom_curve`参数?-LMLPHP
来自help("+.gg")

如果您要在绘图中显示其他参数-每条线的颜色可能不同,大小不同等-使用Map修改后的数据
df1 <- data.frame(x = c(0,0), y = c(0,0), xend = c(1,1), yend = c(1,1), curvature = c(-.2,.8),
                  colour = c("red", "blue"))
阴谋
ggplot(df1) +
  Map(function(i, col) {
    geom_curve(aes(x = x, y = y, xend = xend, yend = yend), curvature = i, colour = col) },
    i = df1$curvature, col = df1$colour
  )
结果
r - 如何在 `curvature`  `ggplot2`函数中传递各个 `geom_curve`参数?-LMLPHP

关于r - 如何在 `curvature` `ggplot2`函数中传递各个 `geom_curve`参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55627528/

10-12 19:23