我正在尝试理解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)
我通过试错得到了大小为76.15
。这个大小可以让两个正方形点刚好接触,但我不明白为什么。图形的宽度为6英寸=152.4mm。为了相遇,这些点必须是2英寸宽=50.8mm。但我看不出大小76.15是如何通过.pt
乘数(2.845276)映射到50.8mm的。
非常感谢任何建议。我应该补充说明,当使用shape=15
而不是22时,获得相同结果的点大小为67.15
,但我不确定这是否能让我们更接近答案。
toDeviceWidth
这一行代码(result = (result / dd->dev->ipr[0]) / fabs(dd->dev->right - dd->dev->left);
)超出了我的理解范围。你的ggplot2点子有什么进展吗? - geotheory