本质上,这是
factor
和
character
类型
Var1
和
Var2
在Reformae2和tidyr版本之间。前者的
melt()
保留相关矩阵的因子和顺序:
"mpg", "disp", "hp", "drat", "wt", "qsec"
和后者的
tibble:rownames_to_colums()
按字母顺序创建字符类型:
"disp", "drat", "hp", "mpg", "qsec", "wt"
. 如图所示,两者都有不同的影响绘图渲染的级别。
要解决此问题,请考虑
dplyr::mutate
线路使用
base::factor(rownames(.), ...
)并明确将标高定义为cor_base的原始排列
row.names()
. 此外,您的
Var1
和
Var2
已反转。
cor_base <- round(cor(mydata), 2)
cor_base[lower.tri(cor_base)] <- NA
cor_tri <- as.data.frame(cor_base) %>%
mutate(Var1 = factor(row.names(.), levels=row.names(.))) %>%
gather(key = Var2, value = value, -Var1, na.rm = TRUE, factor_key = TRUE)
ggplot(data = cor_tri, aes(Var2, Var1, fill = value)) +
geom_tile()
此外,对于您或未来的读者,这里是
base::reshape
解决上述因素水平问题的版本:
cor_base <- round(cor(mydata), 2)
cor_base[lower.tri(cor_base)] <- NA
cor_base_df <- transform(as.data.frame(cor_base),
Var1 = factor(row.names(cor_base), levels=row.names(cor_base)))
cor_long <- subset(reshape(cor_base_df, idvar=c("Var1"),
varying = c(1:(ncol(cor_base_df)-1)), v.names="value",
timevar = "Var2",
times = factor(row.names(cor_base), levels=row.names(cor_base)),
new.row.names = 1:100,
direction = "long"), !is.na(value))
ggplot(data = cor_long, aes(Var2, Var1, fill = value)) +
geom_tile()