geom_hline不显示问题:原正常水平虚线突然消失
ggplot分面图水平虚线突然消失的排查与解决
问题背景
使用ggplot绘制包含33个分面的活动时长趋势图时,原本正常显示的y=150和y=300两条水平参考虚线突然消失。未修改绘图代码块,初步排查数据框无变动,调整linetype参数后问题依旧。
问题根源
代码中使用了scale_color_discrete(),且geom_line和geom_point图层绑定了color = as.factor(id)的分组映射。ggplot会将颜色映射规则自动应用到所有后续图层(包括geom_hline),但geom_hline没有对应的分组变量,导致其默认使用的颜色与theme_minimal的浅色背景色高度接近,视觉上无法分辨。
解决方法
在geom_hline中显式指定color参数,选择与背景对比明显的颜色(如黑色)即可恢复虚线显示。修改后的完整绘图代码如下:
# Create labels and limits for week numbers labels_week_n <- c("W\n1", "W\n2", "W\n3", "W\n4", "W\n5") limits_week_n <- c( "Week 15 of 2016", "Week 16 of 2016", "Week 17 of 2016", "Week 18 of 2016", "Week 19 of 2016" ) # Weekly_moderate_very plot # for all 33 participants weekly_moderate_very_p <- weekly_data %>% { ggplot(.) + geom_line( aes( x = as.factor(week_number), y = weekly_mod_very_m, group = id, color = as.factor(id) ), linejoin = "mitre", show.legend = FALSE, size = .5 ) + geom_point( aes( x = as.factor(week_number), y = weekly_mod_very_m, group = id, color = as.factor(id) ), show.legend = FALSE, size = 1) + labs( title = "Moderate/vigorous activity", subtitle = "Weekly totals for 33 participants", y = "Minutes" ) + scale_x_discrete( name = NULL, limits = limits_week_n, labels = labels_week_n, expand = c(0, 0) ) + scale_y_continuous( breaks = c(0, 150, 300, 450, 600, 750, 900), limits = c(0, 1060) ) + scale_color_discrete() + theme_minimal() + # 显式指定虚线颜色,解决背景色融合问题 geom_hline(yintercept = 150, linetype = "dashed", color = "black") + geom_hline(yintercept = 300, linetype = "dashed", color = "black") + facet_wrap(~id, drop = TRUE, nrow = 3, ncol = 11, scales = "fixed") + theme( plot.title = element_text( margin = margin(5, 5, 5, 0), size = 14, hjust = 1, face = "bold" ), plot.subtitle = element_text( margin = margin(1, 5, 5, 0), size = 10, hjust = 1, face = "italic" ), axis.title.y = element_text( margin = margin(0, 5, 0, 5), size = 12 ), panel.spacing.x = unit(.75, "lines") ) } weekly_moderate_very_p
内容的提问来源于stack exchange,提问作者M S
相关产品推荐
相关产品推荐

