我正在尝试根据列相关性为 ggpairs 绘图矩阵中的文本分配颜色(高相关性为红色,低相关性为蓝色):
colors <- colorRampPalette(c("blue", "red"))(100)
correlation_color <- function(data, mapping, ...) {
cor = print(cor(data[,toString(mapping$x)], data[,toString(mapping$y)]))
col = colors[round(abs(cor) * 100)]
print(col)
print(class(col))
ggally_text(paste("Cor: ", round(cor, 2), sep = ""), aes(color = col))
}
plt = ggpairs(sales_df,
lower = list(continuous = wrap("smooth", color='blue', size=0.5, method='loess')), diag = list(continuous = wrap("barDiag", binwidth=1, color='blue')),
upper = list(continuous = wrap(correlation_color))
) + theme_light()
plt
首先,我不明白为什么mapping$x
在使用它对数据框进行子集之前需要转换为字符串。
除此之外,我的代码失败并出现以下错误:
Error in .subset(col, i) : object of type 'symbol' is not subsettable
当我将 aes(color = col) 替换为 aes(color = "red") 时,不会发生这种情况。我也试过:
ggally_text(paste("Cor: ", round(cor, 2), sep = ""), color = col)
但这不会在文本上产生颜色(除了警告The plyr::rename operation has created duplicates for the following name(s): (
颜色)
)
怎么了?错误/警告对我来说完全没有意义。类型是什么symbol
?为什么我不能用另一个字符串替换一个字符串?有没有更简单的方法来实现我的目标?
编辑
这是一个最小的无意义示例数据集:
sales_df <- data.frame(X1=seq(1,9,length.out = 15), X2=1:15)