我正在尝试根据列相关性为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替换aes(color = col)时,不会发生这种情况(color =&#34; red&#34;)。我也尝试过:
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)