【问题标题】:Color plotly text annotation彩色绘图文本注释
【发布时间】:2018-06-08 16:39:28
【问题描述】:

我已经对xy 数据进行了聚类,我想使用Rplotly 绘制这些数据,其中的点由它们的聚类成员着色,并且有文本注释聚类编号和点的分数总数。我也试图让这个文本注释与点的颜色相同,即按集群着色。

这是我的代码:

library(dplyr)
library(plotly)
set.seed(1)
df <- do.call(rbind,lapply(seq(1,20,4),function(i) data.frame(x=rnorm(50,mean=i,sd=1),y=rnorm(50,mean=i,sd=1),cluster=i)))
df$cluster <- factor(df$cluster)
cluster.colors <- c("#FF6C91","#EF7F47","#D39300","#AAA300","#6BB100")
cluster.centers.df <- dplyr::group_by(df,cluster) %>%
  dplyr::mutate(x=mean(x),y=mean(y),n=n()) %>% unique()
cluster.centers.df$percentage <- cluster.centers.df$n/sum(cluster.centers.df$n)
cluster.centers.df$cluster <- as.character(cluster.centers.df$cluster)


plot_ly(marker=list(size=12),type='scatter',mode="markers",x=df$x,y=df$y,color=df$cluster,colors=cluster.colors,showlegend=F) %>%
  add_annotations(text=sprintf("<b>%s</b>",paste0(cluster.centers.df$cluster,"\n",gsub("\\.00","",as.character(cluster.centers.df$percentage)),"%")),showarrow=T,arrowhead=1,arrowsize=1,x=cluster.centers.df$x,y=cluster.centers.df$y,ax=20,ay=-30,font=list(size=14,color=cluster.colors)) %>%
  layout(xaxis=list(title="X",zeroline=F,showticklabels=F),yaxis=list(title="Y",zeroline=F,showticklabels=F))

但是,这不会根据cluster.colors 为文本着色。

有什么想法吗?

【问题讨论】:

    标签: r annotations plotly scatter


    【解决方案1】:

    我无法弄清楚为什么add_annotations() 方法不起作用,所以我手动创建了注释并在每个 for 循环迭代中添加了颜色。请参考下面的代码,如果这能解决您的问题,请告诉我。

    library(dplyr)
    library(plotly)
    set.seed(1)
    df <- do.call(rbind,lapply(seq(1,20,4),function(i) data.frame(x=rnorm(50,mean=i,sd=1),y=rnorm(50,mean=i,sd=1),cluster=i)))
    df$cluster <- factor(df$cluster)
    cluster.colors <- c("#FF6C91","#EF7F47","#D39300","#AAA300","#6BB100")
    cluster.centers.df <- dplyr::group_by(df,cluster) %>%
      dplyr::mutate(x=mean(x),y=mean(y),n=n()) %>% unique()
    cluster.centers.df$percentage <- cluster.centers.df$n/sum(cluster.centers.df$n)
    cluster.centers.df$cluster <- as.character(cluster.centers.df$cluster)
    
    a <- c()
    for (i in 1:length(cluster.centers.df$cluster)){
      a[[i]] <- list(text=sprintf("<b>%s</b>",paste0(cluster.centers.df$cluster[i],"\n",gsub("\\.00","",as.character(cluster.centers.df$percentage[i])),"%")),showarrow=T,arrowhead=1,arrowsize=1,x=cluster.centers.df$x[i],y=cluster.centers.df$y[i],ax=20,ay=-30,font=list(size=14,color=cluster.colors[i]))
    }
    plot_ly(marker=list(size=12),type='scatter',mode="markers",x=df$x,y=df$y,color=df$cluster,colors=cluster.colors,showlegend=F) %>%
    layout(annotations = a, xaxis=list(title="X",zeroline=F,showticklabels=F),yaxis=list(title="Y",zeroline=F,showticklabels=F))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      相关资源
      最近更新 更多