使用 ggplot 制作热图以不正确的顺序放置图块
Using ggplot to make a heatmap places tiles in incorrect order
这可能是由于一些愚蠢的错误,但我已经能够为我最初的问题生成一个代表,所以希望有人能提供帮助。
我的目标是创建相关图上三角形的热图,但是当将数据变长并在 NA 值未在顶部创建漂亮三角形的地方绘制时会发生一些事情。
我试过将变量转换为因子并手动设置轴中断,但无法找出问题所在。提前致谢!
代表代码:
fake.cor <- cor(iris[,1:4])
fake.cor[upper.tri(fake.cor)] <- NA
#get in long form
fake.cor.df <- data.frame(fake.cor,
var1 = row.names(fake.cor)) %>%
reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
mutate_at(vars(var1, var2), function(x) factor(x, levels = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")))
ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
geom_tile() +
scale_x_discrete(breaks = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")) +
scale_y_discrete(breaks = c("Sepal.Width", "Sepal.Length", "Petal.Width", "Petal.Length"))
要手动设置 factor
列的顺序,您需要正确设置级别
fake.cor.df <- data.frame(fake.cor,
var1 = row.names(fake.cor)) %>%
reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
mutate(var1 = factor(var1, levels = rev(c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"))),
var2 = factor(var2, levels = rev(levels(var1))))
ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
geom_tile()
输出
这可能是由于一些愚蠢的错误,但我已经能够为我最初的问题生成一个代表,所以希望有人能提供帮助。
我的目标是创建相关图上三角形的热图,但是当将数据变长并在 NA 值未在顶部创建漂亮三角形的地方绘制时会发生一些事情。
我试过将变量转换为因子并手动设置轴中断,但无法找出问题所在。提前致谢!
代表代码:
fake.cor <- cor(iris[,1:4])
fake.cor[upper.tri(fake.cor)] <- NA
#get in long form
fake.cor.df <- data.frame(fake.cor,
var1 = row.names(fake.cor)) %>%
reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
mutate_at(vars(var1, var2), function(x) factor(x, levels = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")))
ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
geom_tile() +
scale_x_discrete(breaks = c("Petal.Length", "Petal.Width", "Sepal.Length", "Sepal.Width")) +
scale_y_discrete(breaks = c("Sepal.Width", "Sepal.Length", "Petal.Width", "Petal.Length"))
要手动设置 factor
列的顺序,您需要正确设置级别
fake.cor.df <- data.frame(fake.cor,
var1 = row.names(fake.cor)) %>%
reshape2::melt(variable.name = "var2" , value.name = "spearman") %>%
mutate(var1 = factor(var1, levels = rev(c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"))),
var2 = factor(var2, levels = rev(levels(var1))))
ggplot(fake.cor.df, aes(x = var1, y = var2, fill = spearman)) +
geom_tile()
输出