之前有一个问题previously asked question,解决了如何给坐标轴文本着色的问题。然而,在分面设置中,特别是当scales
参数设置为"free"
时,提供的解决方案都不起作用。
考虑以下数据集:
library( ggplot2 )
X <- data.frame( V1 = LETTERS, V2 = runif( 26 ),
V3 = rep( c("F1", "F2"), each = 13 ) )
我们可以在单个面板上绘制数据,如下所示突出显示字母D、O、T。
v <- ifelse( X$V1 %in% c( "D", "O", "T" ), "red", "black" )
g <- ggplot( X, aes( x = V1, y = V2 ) ) + geom_point() +
theme( axis.text.x = element_text( color = v ) )
使用默认的
scales = "fixed"
将图形分面,可以正确地在两个分面上突出显示D、O和T。g + facet_wrap( ~V3 )
然而,将scales
参数切换为"free"
会导致意外行为,只有D和Q被突出显示。g + facet_wrap( ~V3, scales = "free" )
我的问题是这是一个bug还是我需要修改v
的定义来适应自由比例。如果这是一个bug,有人知道在每个(自由缩放)facet中突出显示特定轴文本的解决方法吗?
X <- X %>% mutate(x.label = paste("<span style = 'color: ", ifelse( X$V1 %in% c( "D", "O", "T" ), "red", "black" ), ";'>", V1, "</span>", sep = ""), x.label = fct_reorder(x.label, as.character(V1))) ; ggplot( X, aes( x = x.label, y = V2 ) ) + geom_point() + theme( axis.text.x = element_markdown( hjust = 1)) + facet_wrap( ~V3, scales = "free" )
- user20650