Plotly R:使用线图的颜色和变换
Plotly R : Using colour and transformation with a line plot
我想按组(花种)和年份(我制作的假数据)进行过滤。但是,当我尝试这样做时,过滤会中断。下图说明了这一点,其中采摘了 setosa,但该图上有弗吉尼亚州的数据。它看起来是由使用 color =
引起的。我为这个问题提供了一个解决方案,但是,在我的真实示例中 mode = 'lines'
。这不允许我使用此解决方案。
对于上下文,我的真实示例是 Duck 曲线图。其中类别是国家/地区,x 轴是一天中的小时。
可重现的例子:
set.seed(42)
iris$year <- sample(2009:2011, 150, replace=TRUE) #MAKING FAKE YEAR DATA
p <- iris %>%
plot_ly(
type = 'scatter',
x = ~Sepal.Length,
y = ~Petal.Length,
color = ~as.factor(year), # GROUPING BY YEAR
####### SAMPLE SOLUTION ######## comment out color =. and uncomment the below
# marker = list(color = ~as.factor(year), size = 8, opacity = 0.8),
text = ~Species, # ADDED THIS TO ILLUSTRATE THERE IS WRONG DATA IN THE TRANSFORMATION
mode = 'markers', # IN MY REAL EXAMPLE IM USING LINES.
transforms = list(
list(
type = 'filter',
target = ~Species,
operation = '=',
value = unique(iris$Species)[1]
)
)) %>% layout(
updatemenus = list(
list(
type = 'dropdown',
active = 0,
buttons = list(
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[1]),
label = unique(iris$Species)[1]),
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[2]),
label = unique(iris$Species)[2]),
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[3]),
label = unique(iris$Species)[3])
)
)
)
)
p
预期解决方案:mode = 'lines'
& 按年份着色,同时保持物种过滤。 :)
看起来很奇怪,但如果您先按颜色变量重新排序 data.frame,您的代码就可以正常工作。
set.seed(42)
iris$year <- sample(2009:2011, 150, replace=TRUE) #MAKING FAKE YEAR DATA
iris <- iris[order(iris$year), ]
我想按组(花种)和年份(我制作的假数据)进行过滤。但是,当我尝试这样做时,过滤会中断。下图说明了这一点,其中采摘了 setosa,但该图上有弗吉尼亚州的数据。它看起来是由使用 color =
引起的。我为这个问题提供了一个解决方案,但是,在我的真实示例中 mode = 'lines'
。这不允许我使用此解决方案。
对于上下文,我的真实示例是 Duck 曲线图。其中类别是国家/地区,x 轴是一天中的小时。
可重现的例子:
set.seed(42)
iris$year <- sample(2009:2011, 150, replace=TRUE) #MAKING FAKE YEAR DATA
p <- iris %>%
plot_ly(
type = 'scatter',
x = ~Sepal.Length,
y = ~Petal.Length,
color = ~as.factor(year), # GROUPING BY YEAR
####### SAMPLE SOLUTION ######## comment out color =. and uncomment the below
# marker = list(color = ~as.factor(year), size = 8, opacity = 0.8),
text = ~Species, # ADDED THIS TO ILLUSTRATE THERE IS WRONG DATA IN THE TRANSFORMATION
mode = 'markers', # IN MY REAL EXAMPLE IM USING LINES.
transforms = list(
list(
type = 'filter',
target = ~Species,
operation = '=',
value = unique(iris$Species)[1]
)
)) %>% layout(
updatemenus = list(
list(
type = 'dropdown',
active = 0,
buttons = list(
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[1]),
label = unique(iris$Species)[1]),
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[2]),
label = unique(iris$Species)[2]),
list(method = "restyle",
args = list("transforms[0].value", unique(iris$Species)[3]),
label = unique(iris$Species)[3])
)
)
)
)
p
预期解决方案:mode = 'lines'
& 按年份着色,同时保持物种过滤。 :)
看起来很奇怪,但如果您先按颜色变量重新排序 data.frame,您的代码就可以正常工作。
set.seed(42)
iris$year <- sample(2009:2011, 150, replace=TRUE) #MAKING FAKE YEAR DATA
iris <- iris[order(iris$year), ]