我想在ggplot中制作成对热图。我试图避免使用其他相关性绘图程序,因为它们不支持ggplot中的某些下游美学更改。
我可以使用默认级别生成所需的绘图:
library(reshape2)
library(dplyr)
mat <- round(cor(mtcars[,2:length(mtcars)]),2)
mat[lower.tri(mat)] <- NA
df <- melt(mat) %>% drop_na()
ggplot(data=df, aes(x=Var1, y=Var2, fill=value)) + geom_tile()
然而,假设由于某种原因这些成对比较的顺序很重要,我真正需要绘制的是不同的顺序。我在其他图中使用的方法是使用factor(df$x, levels = c("some", "particular", "order)
,但如果我在这个实例中尝试类似的方法,则图块的顺序也会翻转。mat <- round(cor(mtcars[,2:length(mtcars)]),2)
mat[lower.tri(mat)] <- NA
df <- melt(mat) %>% drop_na()
DesiredOrder <- c("cyl", "carb", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear")
df$Var1 <- factor(df$Var1, levels = DesiredOrder)
df$Var2 <- factor(df$Var2, levels = DesiredOrder)
ggplot(data=df, aes(x=Var1, y=Var2, fill=value)) + geom_tile()
似乎这个问题与提供给 dcast
命令的矩阵顺序有关,但也许我可以在事后通过其他方式控制最终的绘图顺序。无论是在 ggplot
命令中还是在创建传递到绘图函数的数据框对象之前重新排列矩阵中的内容,我都希望能得到任何有关固定绘图顺序的策略的见解。谢谢。
DesiredOrder
对象一样,似乎mat[order(DesiredOrder),]
并没有按照我预期的方式进行行重排。有什么想法吗? 再次感谢。 - Devon O'Rourkemat <- mtcars[, DesiredOrder]; mat <- round(cor(mat), 2)
? - Rui Barradas