r - 如何将多条迹线添加到单个图中?

标签 r plotly purrr r-plotly

我想使用 purrr 包中的 map 将 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 是错误的函数,因为根据定义,它依次将相同的函数迭代应用于不同的参数。

您想要做的是不同的:您希望聚合不同参数的结果,方法是对当前聚合和下一个参数应用给定的操作。在函数式编程术语中,这称为缩减,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
)

关于r - 如何将多条迹线添加到单个图中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60303603/

相关文章:

r - 库 "TableOne"多重比较。逐行计算 p 值

r - 水平图颜色键 - 范围和极值

python - plotly :如何结合 make_subplots() 和 ff.create_distplot()?

python - 单击几下后“update_layout”无法正常工作

r - 当编织 rmd 时,html 文件不显示交互式传单 map

r - 为每个主题 ID 添加额外的行并维护其他列中的值

r - 如何在绘图标题或标签中的文本下划线?

python - 如何让plotly python在打开html时不自动下载图表?

r - 使用 purrr 和 R 执行多元回归

r - 将数据框转换为数据框的命名列表,其名称来自 R 中的列