ggplot2:理解点大小

3

我正在尝试理解ggplot/grid如何确定要呈现的点大小。 这个答案(附有Hadley的评论)描述了.pt魔术数字常量的作用,但我看不出这些数字是如何相加的。这里展示了:

# empty ggplot obj with no margins outside panel
p0 = ggplot() + scale_size_identity() +
  scale_y_continuous(expand = c(0,0)) + scale_x_continuous(expand = c(0,0)) +
  theme(axis.text = element_blank(), panel.grid = element_blank(),
        panel.border = element_rect(colour='black', fill='transparent'),
        panel.spacing = unit(0, 'mm'), axis.ticks.length = unit(0, "mm"),
        plot.margin=unit(c(0,0,0,0), "mm")) + labs(x=NULL, y=NULL)

# 2 data points plus 2 corner points to define bbox ('limits' args seem to force extra margins)
d = data.frame(x = 1:4, y = c(100,150,250,300), sz = c(0,76.15,76.15,0))

p = p0 + geom_point(data=d, aes(x, y, size=sz), fill='red', stroke=0, shape=22, alpha=.8)

# output to pdf and open
fn='test.pdf'; ggsave(p, filename = fn, w=6, h=4, units = "in"); browseURL(fn)

enter image description here

我通过试错得到了大小为76.15。这个大小可以让两个正方形点刚好接触,但我不明白为什么。图形的宽度为6英寸=152.4mm。为了相遇,这些点必须是2英寸宽=50.8mm。但我看不出大小76.15是如何通过.pt乘数(2.845276)映射到50.8mm的。

非常感谢任何建议。我应该补充说明,当使用shape=15而不是22时,获得相同结果的点大小为67.15,但我不确定这是否能让我们更接近答案。

1个回答

3
您可能会发现这篇旧帖子很有用:http://r.789695.n4.nabble.com/Fwd-R-size-of-point-symbols-td923507.html 基本上,目前唯一可用的参考来确定点形状的大小是源代码 (src/main/engine.c)。
case  22: /* squares */
    xc = toDeviceWidth(RADIUS * SQRC * GSTR_0, GE_INCHES, dd);
    yc = toDeviceHeight(RADIUS * SQRC * GSTR_0, GE_INCHES, dd);
    GERect(x-xc, y-yc, x+xc, y+yc, gc, dd);
    break;

形状0、1、4、7、8、10、12、13、14、15、16、18、19、21似乎受到一个缩小了0.75倍的正方形的限制。

enter image description here


喵,Ripley教授!我也很难理解上面的内容,除了RADIUS是0.375和SQRC是sqrt(pi/4)之外。toDeviceWidth这一行代码(result = (result / dd->dev->ipr[0]) / fabs(dd->dev->right - dd->dev->left);)超出了我的理解范围。你的ggplot2点子有什么进展吗? - geotheory
我记得我曾经用规则多边形制作了一个geom_ngon(在之前被称为ggExtra包,现已停用),但它并不是非常有用。 - baptiste
兄弟,干杯。我想就目前的需求来说,我会假设一英寸对应38.075个点,然后看看效果如何。 - geotheory

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