如何将多条迹线添加到单个图中?
How do I add several traces to a single plot?
我想使用 purrr 包中的地图将 y 轴轨迹添加到 plotly 对象。但它不是向现有绘图添加新的轨迹,而是为每条轨迹创建单独的绘图。参见:
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))
有办法解决这个问题吗?
map
是错误的函数,因为根据定义,它依次将相同的函数迭代应用于不同的参数。
您想要做的是不同的:您希望通过对当前聚合和下一个参数应用给定操作,聚合 不同参数的结果。在函数式编程术语中,这被称为 reduction,purrr 为其提供函数 reduce
。
trace_vars = c(~Sepal.Length, ~Sepal.Width, ~Petal.Length, ~Petal.Width)
result = reduce(trace_vars, ~ add_trace(.x, x = xaxis, y = .y), .init = p)
这实际上与
相同
add_trace(
add_trace(
…,
x = xaxis, y = ~Sepal.Width
),
x = xaxis, y = ~Sepal.Length
)
您可以通过 reduce
的 .dir
参数反转方向。
要包含姓名,请使用 reduce2
和经过修改的公式。不幸的是,从公式中提取名称有点烦人:
trace_names = map_chr(trace_vars, ~ as.character(.x[[2L]]))
result = reduce2(
trace_vars, trace_names,
~ add_trace(..1, x = xaxis, y = ..2, name = ..3),
.init = p
)
我想使用 purrr 包中的地图将 y 轴轨迹添加到 plotly 对象。但它不是向现有绘图添加新的轨迹,而是为每条轨迹创建单独的绘图。参见:
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))
有办法解决这个问题吗?
map
是错误的函数,因为根据定义,它依次将相同的函数迭代应用于不同的参数。
您想要做的是不同的:您希望通过对当前聚合和下一个参数应用给定操作,聚合 不同参数的结果。在函数式编程术语中,这被称为 reduction,purrr 为其提供函数 reduce
。
trace_vars = c(~Sepal.Length, ~Sepal.Width, ~Petal.Length, ~Petal.Width)
result = reduce(trace_vars, ~ add_trace(.x, x = xaxis, y = .y), .init = p)
这实际上与
相同add_trace(
add_trace(
…,
x = xaxis, y = ~Sepal.Width
),
x = xaxis, y = ~Sepal.Length
)
您可以通过 reduce
的 .dir
参数反转方向。
要包含姓名,请使用 reduce2
和经过修改的公式。不幸的是,从公式中提取名称有点烦人:
trace_names = map_chr(trace_vars, ~ as.character(.x[[2L]]))
result = reduce2(
trace_vars, trace_names,
~ add_trace(..1, x = xaxis, y = ..2, name = ..3),
.init = p
)