首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R图图形图例中显示所有图例级别

在R图图形图例中显示所有图例级别
EN

Stack Overflow用户
提问于 2019-09-07 02:29:18
回答 1查看 299关注 0票数 0

我正在尝试生成具有与颜色编码值相对应的legend的图形。

以下是我的数据:

代码语言:javascript
复制
df <- data.frame(group = c(rep("A",3),rep("B",3),rep("C",3)),
                 start = c(1,3,5), end = c(2,4,6), width = 1, y = 0.1, label = rep(paste0("segment ",1:3),3),
                 value.range = c("7-8","2-3","4-5","1-2","5-6","3-4","6-7","8-9","6-7"))

然后将每个value.range与一种颜色进行匹配:

代码语言:javascript
复制
colors.df <- data.frame(value.range = c("1-2","2-3","3-4","4-5","5-6","6-7","7-8","8-9"),
                        color = colorRampPalette(c("lightgray","darkred"))(8),
                        stringsAsFactors = F)

df$value.range设置为以colors.df$value.range为级别的factor

代码语言:javascript
复制
df$value.range <- factor(df$value.range, levels = colors.df$value.range)

然后我生成一个plotly图形的list,每个df$group对应一个

代码语言:javascript
复制
plot.list <- lapply(c("A","B","C"), function(g){
  plotly::plot_ly(dplyr::filter(df,group == g),showlegend=T) %>%
    plotly::add_bars(x =~ start,y =~ y,width =~ width,color =~ value.range, colors = colors.df$color) %>%
    plotly::layout(annotations = list(text = g, xref = "paper", yref = "paper", yanchor = "bottom", xanchor = "center", align = "center", x = 0.5, y = 1, showarrow = F), legend = list(x = 1, y = 0)) %>%
    plotly::layout(xaxis = list(title = NA, zeroline = F, tickangle = 45, range = c(-1, max(dplyr::filter(df,group == g)$end) + 1), tickvals = dplyr::filter(df,group == g)$start, ticktext = dplyr::filter(df,group == g)$label),
                   yaxis = list(title = NA, zeroline = F, showgrid = F, range = c(0,1), showticklabels = F)) %>%
    plotly::add_annotations(text = "log2(value)", xref = "paper", yref = "paper", x = 0.99, xanchor = "left", y = 0.5, yanchor = "top", legendtitle = T, showarrow = F)
})

这就给出了:

正如您所看到的,每个图的legend只显示其各自组中的value.range值。

我的问题是,是否有可能,以及如何让每个legend显示value.range的所有值(即colors.df中的所有内容)。

EN

回答 1

Stack Overflow用户

发布于 2019-09-07 02:48:56

您是否考虑过使用subplot函数组合绘图?合并后的曲线图将具有一个包含所有值的图例。

代码语言:javascript
复制
plotly::subplot(plot.list)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57826987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档