在RMarkdown HTML文件中为ggplot添加下拉筛选列表
解决ggplotly图表年份线条重叠:添加下拉筛选并隐藏图例
要解决线条重叠问题,同时实现按死亡年份(anoobito)筛选的下拉菜单、隐藏图例,直接修改ggplotly的布局配置即可。以下是完整的修改后代码:
library(tidyverse) library(plotly) set.seed(123) # 设置随机种子保证结果可复现 data <- data.frame( anoobito = sample(2019:2023, 23000, replace = TRUE), # 修正原代码sample参数问题,确保生成23000行数据 diadasemana = sample(c("Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"), 23000, replace = TRUE) ) dia <- data %>% group_by(anoobito, diadasemana) %>% tally %>% mutate(diadasemana = factor(diadasemana, levels = c("Domingo","Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"))) plot <- ggplot(dia, aes(x = diadasemana, y = n, group = anoobito)) + geom_line(aes(color = anoobito), size = 2) + geom_point(aes(color = anoobito), size = 3) + theme_minimal(base_size = 15) + scale_y_continuous(limits = c(0,1000), expand = expansion(mult = c(0, .1))) + theme( axis.line = element_line(colour = "black"), axis.text.x=element_text(colour="black"), axis.text.y=element_text(colour="black") ) + labs( x = "Dia da Semana", # 修正原x轴标签错误,原代码x标签写的是年份,但x轴是星期几 y = "Número de Óbitos", caption = "**Fonte**: SIM, SMS-RJ. Dados sujeitos a alterações." ) # 转换为ggplotly并添加下拉筛选、隐藏图例 pp <- ggplotly(plot) %>% layout( legend = list(visible = FALSE), # 隐藏图例 updatemenus = list( list( type = "dropdown", active = 0, # 默认选中第一个选项(2019年) buttons = lapply(unique(dia$anoobito), function(year) { # 计算当前年份对应的trace索引:每个年份对应线条和点两个trace trace_indices <- seq((year - 2019)*2, (year - 2019)*2 + 1) list( label = as.character(year), method = "restyle", args = list( "visible", # 设置所有trace为不可见,再把当前年份的trace设为可见 lapply(0:(length(.$x$data)-1), function(i) i %in% trace_indices) ) ) }) ) ) ) pp
关键修改说明:
- 修正原代码问题:原
sample(2019:2023)仅生成5个值,调整为sample(2019:2023, 23000, replace = TRUE)保证生成23000行数据;同时修正x轴标签错误(原标签写的是"Ano do Óbito",但x轴是星期几,改为"Dia da Semana")。 - 隐藏图例:在
layout中设置legend = list(visible = FALSE),彻底隐藏图例。 - 添加下拉筛选:
- 通过
updatemenus创建下拉菜单,每个按钮对应一个死亡年份。 - 每个年份对应两个trace(线条和散点),计算对应索引后,设置仅当前年份的trace可见,其余隐藏。
- 默认选中第一个年份(2019),可以通过
active参数调整默认选项。
- 通过
内容的提问来源于stack exchange,提问作者Lana Meijinhos
相关产品推荐
相关产品推荐

