我有一个带有两个曲线定义的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])
但这并不是真正的解决方案,因为在我的实际情况下,我有更多的曲线(而且我不知道事先有多少条曲线)。
如何将单个
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
两个参数绘制每条曲线:如何为每一行分别传递
curvature
参数? 最佳答案
更新
您可以先拆分数据,然后使用lapply
遍历结果列表,然后我们将其馈送到data
的geom_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"]) }
)
原始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) }
)
来自
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`参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55627528/