如何在ggplot的facet_grid中组合两个标签函数?
解决ggplot2 facet_grid同时使用两种标签函数的问题
问题描述
需要创建一个2×2的facet_grid,同时应用两种不同的标签处理逻辑:
- 将
thrombin列的逻辑值(FALSE/TRUE)转换为"before thrombin"或"after thrombin" - 将
group列的表达式转换为希腊字母格式
单独使用两种标签函数均正常,但组合使用时出现错误:
error in labeller(label_df) : argument "params" missing
单独实现代码
逻辑值转文本的实现
thrombin_names <- c( `FALSE` = "before thrombin", `TRUE` = "after thrombin" ) plot <- ggplot(data = current_data, aes(x = which_timepoint, y = dIami, group = ID) ) + facet_grid( group ~ thrombin, labeller = labeller( thrombin = as_labeller(thrombin_names)))
表达式转希腊字母的实现
group_labels <- c("alpha*beta*gamma", "alpha*beta['ins2X']*gamma") current_data$group <- factor(current_data$group, levels = c("wt", "2x"), labels = group_labels ) plot <- ggplot( data = current_data, aes(x = which_timepoint, y = dIami, group = ID) ) + facet_grid( group ~ thrombin, labeller = label_parsed )
解决方案
通过labeller()函数为每个分面变量单独指定对应的标签处理函数,即可同时实现两种标签逻辑:
# 定义thrombin的标签映射 thrombin_names <- c( `FALSE` = "before thrombin", `TRUE` = "after thrombin" ) # 处理group的标签为可解析的表达式 group_labels <- c("alpha*beta*gamma", "alpha*beta['ins2X']*gamma") current_data$group <- factor(current_data$group, levels = c("wt", "2x"), labels = group_labels ) # 组合两种标签函数 plot <- ggplot(data = current_data, aes(x = which_timepoint, y = dIami, group = ID)) + facet_grid( group ~ thrombin, # 为每个变量指定对应的标签器 labeller = labeller( group = label_parsed, thrombin = as_labeller(thrombin_names) ) )
原理说明
labeller()函数支持为每个分面变量单独设置标签处理规则,不同变量的标签器互不干扰group列使用label_parsed解析表达式,生成希腊字母格式的标签thrombin列使用as_labeller(thrombin_names)将逻辑值映射为指定文本标签
这样就能同时实现两种标签逻辑,避免参数缺失的错误。
内容的提问来源于stack exchange,提问作者Franziska Schreiber
相关产品推荐
相关产品推荐

