首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在热图上缩放geom_point大小以正确地适应R?

在热图上缩放geom_point大小以正确地适应R?
EN

Stack Overflow用户
提问于 2021-09-27 13:32:26
回答 1查看 316关注 0票数 0

基本上,我有一个包含一些要点的热图。我想要做的是用一种合理的方式,对不同尺寸的热图自动增加点的大小。例如,如果我有一个如下所示的热图:

代码语言:javascript
复制
library(reshape)
library(ggplot2)
library(ggnewscale)

# Create matrix
set.seed(1701)
a <- sample(1:10,100, replace=TRUE)
s <- matrix(a, nrow = 5, ncol=5)
s[upper.tri(s)] = t(s)[upper.tri(s)]
rownames(s) <- colnames(s) <- paste0("x", 1:5)
diag(s) <- 0
sDf <- melt(s)

# create diagonal values
diagDf <- data.frame(
  var1 = c(paste0("x", 1:5)),
  var2 = c(paste0("x", 1:5)),
  val = c(2,5,3,1,5)
)

# make plot
ggplot(sDf, aes(X1,X2)) + 
  geom_tile(aes(fill = value)) +
  scale_fill_gradientn(colors = rev(colorspace::sequential_hcl(palette = "Blues 3", n = 100))) +
  new_scale_fill() +
  geom_point(data = diagDf, aes(var1, var2, col = val), size = 20) +
  theme(aspect.ratio = 1) 

因此,在上面的图像中,对角线包含geom_points,其大小手动设置为size = 20.这适用于这个示例,但问题是:如果热图尺寸更改为20x20,那么硬编码为等于20的大小由于重叠(点太大等)而无法工作。

所以我想要做的是想出一种方法,自动调整点的大小,有效地填充正方形,不重叠,太大或太小。

关于我该怎么做有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-27 13:53:13

我会这样做:

代码语言:javascript
复制
library(reshape)
library(ggplot2)
library(ggnewscale)

n <- 5
# Create matrix
set.seed(1701)
a <- sample(1:10,100, replace=TRUE)
s <- matrix(a, nrow = n, ncol=n)
s[upper.tri(s)] = t(s)[upper.tri(s)]
rownames(s) <- colnames(s) <- paste0("x", 1:n)
diag(s) <- 0
sDf <- melt(s)

# create diagonal values
diagDf <- data.frame(
  var1 = c(paste0("x", 1:n)),
  var2 = c(paste0("x", 1:n)),
  val = sample(1:5,n,replace = T)
)

# make plot
ggplot(sDf, aes(X1,X2)) + 
  geom_tile(aes(fill = value)) +
  scale_fill_gradientn(colors = rev(colorspace::sequential_hcl(palette = "Blues 3", n = 100))) +
  new_scale_fill() +
  geom_point(data = diagDf, aes(var1, var2, col = val), size = 1/sqrt(nrow(sDf))*80) +
  theme(aspect.ratio = 1) 

这里,点的大小取决于矩阵的维数。

具有3x3、5x5和10x10矩阵的输出示例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69347558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档