在ggplot2中,如何使点的大小随着图形缩放而变化?

5
我希望绘制一个相关矩阵的Hinton图,我已经完成了99%的工作,但是当我设置要绘制的点的大小时,该大小以像素为单位,因此随着图形大小的变化而不会缩放。 我如何“校准”点的大小,使其成为轴大小的一部分? 例如,我希望在将图形的大小加倍时,点的大小也加倍。 我可能使用了错误的几何形状。以下是我的代码:
library(ggplot2)
library(data.table)
library(reshape2)

DT = data.table(A = rnorm(10), B = rnorm(10), X = rnorm(10), Y = rnorm(10))
C = cor(DT)

ggplot(melt(C), aes(x=Var1, y=Var2, size=abs(value), color=as.factor(sign(value)))) +
  geom_point(shape = 15) +
  scale_size_area(max_size = 40) +
  theme_bw()

通过更改scale_size_areamax_size,我几乎可以使对角线填满区域,但如果我改变图表的大小,点不会按比例缩放。有没有一种方法可以强制点在轴坐标中占用特定的大小?理想情况下,我想使用矩形,这样我就可以拥有任何形状并且仍然可以工作,但我不知道哪个几何对象可以实现这一点?enter image description here
1个回答

4

只需要使用 as.numeric 将 Var1 和 Var2 转换为网格坐标,并在 geom_rect() 函数中绘制每个交点上的矩形。如果添加 0.5 单位 * 相关性来生成最大和最小坐标,它们将恰好适合值为 1,并按比例缩小:

ggplot(melt(C)) +
  geom_point(aes(Var1,Var2)) +
  geom_rect(aes(xmin=as.numeric(Var1)-0.5*abs(value),xmax=as.numeric(Var1)+0.5*abs(value),ymin=as.numeric(Var2)-0.5*abs(value),ymax=as.numeric(Var2)+0.5*abs(value),fill=as.factor(sign(value)))) +
  theme_bw()

enter image description here


你的图表为什么有正确的标记轴?我使用你的示例代码只得到 1、2、3、4。 - Corvus
抱歉 - 更新 - 您需要添加一个geom_point()调用来标记轴上的因子;我已经将我的图像和代码不同步... - Troy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接