aya*_*ada 3 r plotly purrr r-plotly
我想使用 purrr 包中的地图将 y 轴轨迹添加到绘图对象。但它不是向现有绘图添加新迹线,而是为每个迹线创建单独的绘图。看:
library(purrr)
library(plotly)
data("iris")
p = plot_ly(iris, type = "bar")
xaxis = ~Species
map(c(~Sepal.Length, ~Sepal.Width, ~Petal.Length, ~Petal.Width), ~add_trace(p, x = xaxis, y = .x))
Run Code Online (Sandbox Code Playgroud)
有办法解决这个问题吗?
map是错误的函数,因为根据定义,它依次迭代地将相同的函数应用于不同的参数。
您想要做的是不同的:您想要通过对当前聚合和下一个参数应用给定操作来聚合不同参数的结果。在函数式编程术语中,这称为归约,reduce并且 purrr为其提供了函数。
trace_vars = c(~Sepal.Length, ~Sepal.Width, ~Petal.Length, ~Petal.Width)\nresult = reduce(trace_vars, ~ add_trace(.x, x = xaxis, y = .y), .init = p)\nRun Code Online (Sandbox Code Playgroud)\n\n这实际上与
\n\nadd_trace(\n add_trace(\n \xe2\x80\xa6,\n x = xaxis, y = ~Sepal.Width\n ),\n x = xaxis, y = ~Sepal.Length\n)\nRun Code Online (Sandbox Code Playgroud)\n\nreduce您可以通过\xe2\x80\x99s参数反转方向.dir。
要包含名称,请使用reduce2经过调整的公式。不幸的是,从公式中提取名称有点烦人:
trace_names = map_chr(trace_vars, ~ as.character(.x[[2L]]))\n\nresult = reduce2(\n trace_vars, trace_names,\n ~ add_trace(..1, x = xaxis, y = ..2, name = ..3),\n .init = p\n)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |