如何让levelplot内置色键标签字体匹配draw.colorkey生成的色键?
统一levelplot自带色键与draw.colorkey生成色键的标签字体
要让levelplot自带的小型色键和draw.colorkey生成的大型色键标签字体保持一致,核心是让两者使用相同的字体参数配置。这里有两种简单可行的方法:
方法一:单独为两个色键设置相同的字体参数
你可以先定义一套统一的标签字体配置,然后分别应用到levelplot的colorkey和draw.colorkey中:
- 首先加载lattice包并准备示例数据:
library(lattice) # 生成示例数据 x <- seq(0, 1, length.out = 100) y <- seq(0, 1, length.out = 100) z <- outer(x, y, function(x, y) sin(x*pi)*cos(y*pi))
- 定义统一的字体设置(按需调整字体家族、大小、样式):
# 自定义色键标签的字体配置 key_label_config <- list( labels = list( cex = 1.1, # 字体大小 fontfamily = "Arial", # 字体家族 fontface = "plain" # 字体样式:plain/italic/bold ) )
- 应用配置到levelplot和draw.colorkey:
# 带自定义字体色键的levelplot p <- levelplot(z ~ x*y, colorkey = c(list(TRUE), key_label_config)) print(p) # 用相同字体配置生成大型色键 big_colorkey <- draw.colorkey(key = list( col = terrain.colors(100), at = do.breaks(range(z), 100), key_label_config$labels )) # 把大型色键放到图的右侧 print(big_colorkey, position = c(0.8, 0.2, 0.9, 0.8), more = FALSE)
方法二:全局设置lattice的色键标签字体
如果希望所有lattice绘图的色键标签都统一字体,可以用trellis.par.set()全局配置,这样无需单独为每个色键设置参数:
library(lattice) # 设置全局色键标签字体 trellis.par.set( par.key.text = list( fontfamily = "Arial", cex = 1.1, fontface = "bold" ) ) # 生成带默认色键的levelplot(自动使用全局字体) p <- levelplot(z ~ x*y, colorkey = TRUE) print(p) # 生成大型色键(同样继承全局字体设置) big_colorkey <- draw.colorkey(key = list( col = terrain.colors(100), at = do.breaks(range(z), 100) )) print(big_colorkey, position = c(0.8, 0.2, 0.9, 0.8), more = FALSE)
原理说明
- levelplot的
colorkey参数可以接受一个列表,其中的labels子列表和draw.colorkey的key参数中的labels配置完全对应,只要两者参数一致,字体就会统一。 trellis.par.set()中的par.key.text是lattice专门控制色键标签样式的全局参数,设置后所有色键(包括自带的和手动生成的)都会自动使用这个配置。
内容的提问来源于stack exchange,提问作者Kathryn Cogert
相关产品推荐
相关产品推荐

