gpt4 book ai didi

r - 如何重新排序具有特定因子顺序的 ggplot 对象

转载 作者:行者123 更新时间:2023-12-02 04:25:36 24 4
gpt4 key购买 nike

我正在尝试在 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()

enter image description here

但是,假设出于某种原因,这些成对比较的顺序是相关的,而我真正需要绘制的是不同的顺序。我对其他图所做的方法是使用 factor(df$x, levels = c("some", "particular", "order),但如果我在在这个例子中,图 block 的顺序现在也被翻转了。

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()

enter image description here

这个问题似乎与提供给 dcast 命令的矩阵的顺序有关,但也许还有另一种方法可以在事后控制最终的绘图顺序。

我很感激任何关于固定绘图顺序的策略的见解,无论是在 ggplot 命令中还是在创建传递给绘图的数据框对象之前对矩阵中的某些内容重新排序功能。

谢谢

最佳答案

正如评论所建议的,您需要对矩阵重新排序,然后取下三角,以便在您gather(melt)时保留正确的观察结果。这是代码的管道版本,主要添加是在删除下三角单元格之前重新排序。其他更改包括使用 gather(na.rm = TRUE)mutate_at 来保存几行代码。

library(tidyverse)
mat <- round(cor(mtcars[,2:length(mtcars)]),2)
DesiredOrder <- c("cyl", "carb", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear")

mat %>%
`[`(DesiredOrder, DesiredOrder) %>%
`[<-`(lower.tri(.), NA) %>%
as_tibble(rownames = "var1") %>%
gather(var2, value, -var1, na.rm = TRUE) %>%
mutate_at(vars(var1, var2), ~ factor(., levels = DesiredOrder)) %>%
ggplot() +
geom_tile(aes(x = var1, y = var2, fill = value))

reprex package 创建于 2019-02-20 (v0.2.1)

关于r - 如何重新排序具有特定因子顺序的 ggplot 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54794201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com