处理两位数和图例时出现问题

Problem dealing with double digits and legend

提问人:Mars_87 提问时间:11/2/2023 最后编辑:ukeMars_87 更新时间:11/4/2023 访问量:24

问:

我请求您的帮助,因为我尝试过寻找答案,但未能成功 我是 ggplot 的新手。

这是我试图做的事情,直到现在都没有成功。

我必须设置一个 Spearman 相关热图。 我想用四舍五入到小数点后第二个点的相关系数来准备它,这是(双精度)问题。

  1. 如果我在没有相关系数的情况下运行图形,则带有颜色条的图例将完美地放置在图形的外部右侧。

    但是,当我尝试将相关系数与两位数四舍五入相加时,管理图例位置变得更加困难,因为它被放置在图表上,而边距消失,老实说,我不知道如何像上图那样将其设置回去。

  2. 在尝试设置它时,使用我发现的不同公式来准备相关性,我得到了颜色略有不同的热图,因此我假设即使是潜在的系数也相应不同。

这是我在论坛上的第二个问题,也许是第三个问题,所以我在展示我的数据时仍然“不礼貌”,但我会尽我所能。

一位好心的专家建议我使用 dput() 命令来显示我的数据,所以我会尝试一下。 这只是一个非常简单的表格,我用它来尝试命令。

library(ggplot2)
library(reshape2)
library(Hmisc)
library(corrplot)

dput(Cartel1)

structure(list(A = c(1L, 1L, 1L, 1L, 1L, 5L, 5L, 5L, 5L, 5L), 
    B = c(2L, 2L, 2L, 2L, 2L, 10L, 11L, 9L, 10L, 10L), C = c(20L, 
    21L, 19L, 20L, 19L, 10L, 9L, 8L, 8L, 7L), D = 1:10, E = c(2L, 
    1L, 2L, 3L, 1L, 9L, 9L, 9L, 8L, 9L)), class = "data.frame", row.names = c(NA, 
-10L))

我使用的提示是:

A) 准备不带相关系数的斯皮尔曼相关热图:

testtest <- as.matrix(Cartel1)
cormatrix = rcorr(as.matrix(testtest), type='spearman')
cordata = melt(cormatrix$r)

ggplot(cordata, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile() + xlab("") + ylab("") + scale_fill_gradient2(low = "orange", high = "green", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="Spearman\nCorrelation") + theme_minimal()+ theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 8, hjust = 1))

B) 尝试使用相关系数设置斯皮尔曼相关热图: (您可能会注意到,我不得不四舍五入“3”而不是 2,就像我在网上找到的原始公式一样,我还是新手,我不知道为什么它不能正确四舍五入。我不得不输入“3”

cormat <- round(cor(testtest), 3)

只是在逗号后面有一个 1 位数字,但没关系,如果结果正确,这不是问题。

testtest<-as.matrix(Cartel1)
cormat <- round(cor(testtest),3)
cormatrix = rcorr(as.matrix(cormat), type='spearman')
cordata = melt(cormatrix$r)

ggplot(cordata, aes(x=Var1, y=Var2, fill=value)) + geom_tile() + xlab("") + ylab("") + scale_fill_gradient2(low = "orange", high = "green", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="Spearman\nCorrelation") + theme_minimal()+ theme(axis.text.x = element_text(angle = 90, vjust = 1, size = 8, hjust = 1)) + geom_text(aes(Var2, Var1, label = value), color = "black", size = 3) +
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    panel.grid.major = element_blank(),
    panel.border = element_blank(),
    panel.background = element_blank(),
    axis.ticks = element_blank(),
    legend.justification = c(1, 0),
    legend.position = c(0.6, 0.7),
    legend.direction = "horizontal")+
  guides(fill = guide_colorbar(barwidth = 7, barheight = 1,
                               title.position = "top", title.hjust = 0.5))

提前致谢

编辑:正如 Bastiàn 所建议的那样,在这里我显示了将 3 或 2 值应用于round((cor(testtest),3)

值 3

值 2

ggplot2 热图

评论

0赞 Bastián Olea Herrera 11/2/2023
要修复图例位置,只需删除 中的 、 和参数,并删除部分,您的第一个绘图就会变得与第一个绘图一样。将来,如果你在绘图方面遇到问题,试着评论你试图看到它们如何影响情节外观的东西,因为在这种情况下,在我看来,你尝试了一堆东西并搞砸了你的情节,但简单地删除一些你尝试过的东西就可以修复它!legend.justificationlegend.positionlegend.directiontheme()guides()
1赞 Mars_87 11/2/2023
它工作得很好!谢谢@Bastiàn。问题 1 正式解决。现在还有待理解(如果有人知道的话)如何使两位数四舍五入

答: 暂无答案