r - 缩放热图上的geom_point大小以正确适合R?
问题描述
基本上,我有一个包含一些点的热图。我试图做的是针对不同大小的热图以合理的方式自动重新调整点的大小。例如,如果我有一个看起来像这样的热图:
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 韩元由于重叠和点太大等而无法工作。
所以我想做的是想出一种方法,它会自动调整点的大小以有效地填充它们所包含的正方形,而不会重叠、太大或太小。
关于我如何做到这一点的任何建议?
解决方案
我会做这样的事情:
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 矩阵的输出示例
推荐阅读
- vb.net - 可以过滤多个网格视图的数据源吗?
- regex - REGEX 我可以在哪里删除字符串中的位并仍然获得恒定的分组?
- c++ - 分配一个 static_cast
(-15) 到静态 const char 类型变量 - multithreading - 单核多线程
- vba - 循环遍历索引和匹配模板的员工 ID 列表?
- spring-boot - 托管在 Kubernetes 上的 Spring Boot 微服务中的负载均衡
- javascript - 如何从使用“标准”推文按钮发布的用户推文中获取 ID
- java - 从多个 BlockingQueue 消费
- sql - 左外连接 Lambda
- shell - 受密码保护的 shell 脚本