You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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")

关键说明

  1. 原代码中desired_order的创建语法错误(factor(c(levels = ...))不符合因子创建逻辑),且未将events转换为因子,导致CalendR仍按字母顺序识别类别。
  2. 将events转为指定levels的因子后,CalendR会严格遵循因子的层级顺序生成图例,颜色向量只需与因子levels一一对应即可。

内容的提问来源于stack exchange,提问作者Tuna-92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:12:25