使用此代码很难为某些值指定颜色,因为它使用levelplot 函数进行实际绘图。
您也许可以尝试破解一下,例如使用您想要的阴影值制作一个字符串字符向量,并将蓝色放在向量的开头,这只需要您制作一个类似的向量r2r<- c("#ff0033","#a10020") 这是将从 - 移至的两种红色阴影。然后在levelplot 参数部分更改
col.regions = calendar.pal(ncolors)
到
col.regions = c('#0367FC', calendar.pal(ncolors-1)),
在这种变化之下
colorkey = list(calendar.pal(ncolors), width = 0.6, height = 0.5)
到
colorkey= list(col =c('#0367FC', calendar.pal(ncolors-1)), width = 0.6, height = 0.5)
因此,您将蓝色作为框着色值向量中的第一种颜色。现在您将不得不使用函数调用本身。该函数有这个ncolors 参数,它控制有多少阴影,如果你将它设置为足够低的数字,它将开始使用颜色向量中的第一个阴影作为数据集中的最低值。例如,如果我对函数的本地副本进行相同的更改,然后运行以下命令
start_date <- as.Date('2015-01-01')
end_date <- as.Date('2017-01-01')
dates <- as.Date(sample( as.numeric(start_date): as.numeric(end_date), 56, replace = T), origin = '1970-01-01')
calendarHeat(dates,c(0:55), color='r2r', ncolors = 14)
我得到下面的图,我发送的数据中只有一个零,而且它只有一个蓝色框,所以它可以正确渲染它。
您将不得不使用 ncolors 参数,将其降低直到获得预期数量的蓝色框,这并不理想,但它会起作用。
至于最低颜色为蓝色,0 为白色,其他颜色为一系列颜色,我没有尝试过,但这并不容易。 Levelplot 采用cuts 参数,该参数是划分数据集的级别数。即。这里默认值为 99(这是我们在使用 ncolors 参数时实际更改的参数),因此它获取您传递的所有值并将它们分成 99 个颜色括号。因此,如果您有 -20:35 的值,例如,您可以手动创建一个数组,其中包含从红色到红色的 75 种阴影。然后将第一个值替换为蓝色,将位置 20(对应于 0)的值替换为白色,并传递它而不是 col.regions 和 colorkey,问题是您必须对每个数据集重复此操作并微调ncolors 参数,并检查每次它是否在正确数量的白色/蓝色字段中着色,此时将日历从红色变为红色并填充蓝色可能会更容易和 InkScape 中的白色字段。