gpt4 book ai didi

r - 带有变换和颜色映射的 plot_ly

转载 作者:行者123 更新时间:2023-12-04 11:29:40 25 4
gpt4 key购买 nike

我一直在尝试使用 plot_lytransforms (最终从下拉菜单中对数据进行子集化)和颜色映射。

以下是基于 mtcars 的可重现示例:
transforms没有颜色映射

如果我排除颜色映射,一切都按预期工作:

library(plotly)
library(tidyverse)

plot_ly(
data = mtcars %>% rownames_to_column("id"),
x = ~mpg, y = ~disp, text = ~id,
type = "scatter", mode = "markers+text",
marker = list(size = 10, opacity = 0.8),
transforms = list(
list(
type = "filter",
target = ~cyl,
operation = "=",
value = sort(unique(mtcars$cyl))[1])))

enter image description here

数据过滤为 mtcars$cyl值匹配 sort(unique(mtcars$cyl))[1] = 4 .到现在为止还挺好。
transforms带颜色映射

我现在喜欢根据来自 mtcars$carb 的化油器数量对标记进行颜色编码;如果我添加颜色映射,我最终会得到
library(plotly)
library(tidyverse)

plot_ly(
data = mtcars %>% rownames_to_column("id"),
x = ~mpg, y = ~disp, text = ~id, color = ~as.factor(carb),
type = "scatter", mode = "markers+text",
marker = list(size = 10, opacity = 0.8),
transforms = list(
list(
type = "filter",
target = ~cyl,
operation = "=",
value = sort(unique(mtcars$cyl))[1])))

enter image description here

不知何故, transforms过滤器被忽略,因为该图显示来自 mtcars 的条目哪里 cyl != 4 .我其实不明白是哪个元素 plot_ly决定在这里展示。

有人能提供任何见解吗?非常感谢。

最佳答案

它似乎不喜欢 factorcolor结合 filter .看起来东西正在被洗牌和搞砸,例如color = ~factor(carb, levels = unique(carb))会给你另一个选择和情节。

下面是使用 factor (包括 color 中的 marker )。仅指定 color = ~carb也会起作用。我明白这些都没有真正给你相同的情节/传说。

library(plotly)
library(magrittr)

plot_ly(
data = mtcars %>% tibble::rownames_to_column("id"),
x = ~mpg, y = ~disp, text = ~id,
type = "scatter", mode = "markers+text",
marker = list(color = ~as.factor(carb), size = 10, opacity = 0.8),
transforms = list(
list(
type = "filter",
target = ~cyl,
operation = "=",
value = sort(unique(mtcars$cyl))[1])))

编辑

您显然可以通过 解决重新洗牌问题。首先根据您希望使用的因素对数据进行排序 .下面的代码在这方面工作正常,尽管我仍然不喜欢图例中的所有级别。尽管如此,希望它有一些帮助:
library(plotly)
library(magrittr)

xx <- mtcars[order(mtcars$carb), ]

plot_ly(
data = xx %>% tibble::rownames_to_column("id"),
x = ~mpg, y = ~disp, text = ~id, color = ~factor(carb),
type = "scatter", mode = "markers+text",
marker = list(size = 10, opacity = 0.8),
transforms = list(
list(
type = "filter",
target = ~xx$cyl,
operation = "=",
value = sort(unique(xx$cyl))[1])))

说明

看着 plotly:::plotly_build.plotly ,我们可以看到在某些情况下应用了排序,例如与 一起工作时团体 , 或 离散颜色或符号 .然而,这种排序不包括 transforms/filter ,因此这两件事不同步。

如果你想查这个,你也可以找到 arrange_safe()https://github.com/ropensci/plotly/blob/master/R/plotly_build.R .

它显然应该被认为是 错误 ,但一个好的修复可能并不完全是微不足道的。

确认其他没问题的另一种方法是,如果您只是屏蔽 arrange_safe .例如。像下面这样:
library(godmode)
arrange_safe_new <- function(x, y) x
godmode:::assignAnywhere("arrange_safe", arrange_safe_new)

之后,您的情况会很好(但当然,您可能需要原始 arrange_safe 用于其他情况的功能,所以这只是为了证明一点)。

关于r - 带有变换和颜色映射的 plot_ly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com