R plotly - 两个不同的颜色分散在同一个图上

时间:2018-03-12 08:41:00

标签: r r-plotly

我尝试使用两个àdd_trace命令在同一个图上绘制两组不同的数据。我为每个颜色指定了不同的颜色,但第二个被忽略,因此我的第二个散点图具有与第一个颜色渐变相同的颜色渐变。我该如何解决这个问题?

我尝试了解决方案here,但它无法正常工作(我收到警告说'scatter' objects don't have these attributes: 'colorscale')。

我的代码(带有随机数的数据框用于测试):

library(plotly)
library(FactoMineR)

n <- 10 ; m <- 20 ; reps <- 6 
a <- as.data.frame(cbind(matrix(seq_len(m), n, m/n), 
                         replicate(reps, sample(c(0, 1), n, replace = TRUE))))

res.pca = PCA(a, scale.unit=TRUE, graph=F, axes=c(1,2))
ind <- as.data.frame(res.pca$ind$coord)
cos2 <- as.data.frame(res.pca$ind$cos2)
var <- as.data.frame(res.pca$var$coord)
cos2_v <- as.data.frame(res.pca$var$cos2)

biplot <- plot_ly(ind) %>%
  add_trace(x=ind[,1],
            y=ind[,2],
            type='scatter',
            text=rownames(a),
            textposition='top',
            mode="markers+text", 
            color=cos2[,1],
            colors="OrRd",
            marker=list(symbol=27, size=11)) %>%
  add_trace(var, 
            x=var[,1], 
            y=var[,2],
            type = 'scatter',
            text=colnames(a),
            textposition='top',
            mode="markers+text", 
            color=cos2_v[,1],
            colors="BuGn",
            marker=list(symbol=4, size=11))

提前致谢(实际结果如下图所示)。

enter image description here

1 个答案:

答案 0 :(得分:1)

这有效。如果执行自定义操作,则必须根据plotly::schema()格式化参数。图中的colors参数有助于简化更复杂的plotly.js语法。请注意,color和所有其他标记参数必须如何位于名为marker的列表中,在该列表下,您必须手动设置colorscale(以获取所需的颜色)和colorbar(以正确放置色标)。另请注意,图例用于形状,而色阶用于颜色(令人困惑的是,色阶不是图例)。

library(plotly)
library(FactoMineR)

n <- 10 ; m <- 20 ; reps <- 6
a <- as.data.frame(cbind(matrix(seq_len(m), n, m/n),
                         replicate(reps, sample(c(0, 1), n, replace = TRUE))))

res.pca = PCA(a, scale.unit=TRUE, graph=F, axes=c(1,2))
ind <- as.data.frame(res.pca$ind$coord)
cos2 <- as.data.frame(res.pca$ind$cos2)
var <- as.data.frame(res.pca$var$coord)
cos2_v <- as.data.frame(res.pca$var$cos2)

biplot <- plot_ly(ind,showlegend=F) %>%
  add_trace(x=ind[,1],
            y=ind[,2],
            type='scatter',
            text=rownames(a),
            textposition='top',
            mode="markers+text",
            marker=list(symbol=27, size=11
                        ,color=cos2[,1]
                        ,colorscale=list(
                          list(0,RColorBrewer::brewer.pal(3,'OrRd')[1])
                          ,list(1,RColorBrewer::brewer.pal(3,'OrRd')[3])
                        )
                        ,colorbar=list(yanchor='bottom',len=.5)
            )) %>%
  add_trace(x=var[,1],
            y=var[,2],
            type='scatter',
            text=colnames(a),
            textposition='top',
            mode="markers+text",
            marker=list(symbol=4, size=11
                        ,color=cos2_v[,1]
                        ,colorscale=list(
                          list(0,RColorBrewer::brewer.pal(3,'BuGn')[1])
                          ,list(1,RColorBrewer::brewer.pal(3,'BuGn')[3])
                        )
                        ,colorbar=list(yanchor='top',len=.5)
            ))
biplot

result with two colorscales