首页 > 解决方案 > 将 ggplotly() 图的图例设置为只有颜色而不是形状索引

问题描述

我有下面的数据框:

etf_id<-c("a","b","c","d","e","a","b","c","d","e","a","b","c","d","e")
factor<-c("A","A","A","A","A","B","B","B","B","B","C","C","C","C","C")
normalized<-c(-0.048436801,2.850578601,1.551666490,0.928625186,-0.638111793,
              -0.540615895,-0.501691539,-1.099239823,-0.040736139,-0.192048665,
              0.198915407,-0.092525810,0.214317734,0.550478998,0.024613778)
df<-data.frame(etf_id,factor,normalized)

我创建了一个ggplotly()箱线图:

library(ggplot2)
library(plotly)
ggplotly(ggplot(data = df, aes(x = factor, y = normalized)) +
                   geom_boxplot(aes(fill = as.factor(factor)),outlier.colour = 'black') +
                   geom_point(data = df, position = position_dodge(0.75))+geom_point(data = df, 
                                                                                    aes(x = factor, y = normalized, shape = etf_id, color = etf_id), 
                                                                                     size = 2))

结果,我采用了带有此图例的箱线图: 在此处输入图像描述 但我希望我的图例仅具有如下颜色区别。请注意,因子不会每次都是 3,但可能会在 1 到 8 之间变化。

标签: rggplot2plotly

解决方案


改变情节元素的推荐方法是使用该style()函数。您可以通过检查来识别元素和痕迹plotly_json()

我不确定是否有更紧凑的方法,但您可以使用以下方法实现所需的结果:

p <- ggplotly(ggplot(data = df, aes(x = factor, y = normalized)) +
           geom_boxplot(aes(fill = as.factor(factor)),outlier.colour = 'black') +
           geom_point(data = df, position = position_dodge(0.75))+geom_point(data = df, 
                                                                             aes(x = factor, y = normalized, shape = etf_id, color = etf_id), 
                                                                             size = 2))

p <- style(p, showlegend = FALSE, traces = 5:9)
for (i in seq_along(levels(df$factor))) {
  p <- style(p, name = levels(df$factor)[i], traces = i)
}

p

请注意,在这种情况下,因子水平和轨迹对齐,但并非总是如此,因此您可能需要调整它(即 i + x)。

在此处输入图像描述


推荐阅读