如何在CalendR中重新调整图例层级顺序?
调整CalendR绘制渔船作业日历的图例顺序
问题描述
使用CalendR绘制2024年渔船作业日历时,希望图例按「Big Catch、Fish Tales、Marlin、Holiday」的顺序显示,但当前绘图时图例自动按字母顺序排列,需要手动调整图例层级。
解决方案
CalendR的图例顺序由special.days参数的类别顺序决定,因此核心是将events转换为带有指定层级的因子,而不是仅调整颜色向量的顺序。具体步骤如下:
- 将
events转换为因子,明确指定levels为期望的图例顺序 - 直接按因子层级对应设置颜色,无需额外排序颜色向量
修正后的完整代码
## 加载包 library(tidyverse) library(calendR) library(viridis) library(scales) ## 创建事件向量(2024为闰年,共366天) events <- rep(NA, 366) ## 分配各渔船事件与公共假日 events[c(3, 22, 45, 63, 100, 140, 195, 234, 300)] <- "Big Catch" ## 渔船1 events[c(36, 59, 78, 123, 167, 210, 289, 340)] <- "Fish Tales" ## 渔船2 events[c(25, 80, 90, 155, 255, 297, 339)] <- "Marlin" ## 渔船3 events[c(1, 89, 92, 142, 143, 239, 360, 361)] <- "Holiday" ## 公共假日 ## 将events转换为指定层级的因子(关键步骤) events <- factor(events, levels = c("Big Catch", "Fish Tales", "Marlin", "Holiday")) ## 选择并分配对应颜色 # 从viridis调色板取色,最后一个用浅灰色表示假日 ordered_colours <- c("#3b528bff", "#21908cff", "#5dc863ff", "lightgray") ## 绘制日历 calendR(year = 2024, start = "M", special.days = events, special.col = ordered_colours, lty = 1, bg.col = "white", subtitle.col = 1, weeknames = c("M", "T", "W", "T", "F", "S", "S"), day.size = 3.5, orientation = "l", legend.pos = "bottom")
关键说明
- 原代码中
desired_order的创建语法错误(factor(c(levels = ...))不符合因子创建逻辑),且未将events转换为因子,导致CalendR仍按字母顺序识别类别。 - 将
events转为指定levels的因子后,CalendR会严格遵循因子的层级顺序生成图例,颜色向量只需与因子levels一一对应即可。
内容的提问来源于stack exchange,提问作者Tuna-92
相关产品推荐
相关产品推荐

