我不理解ggplot2
中的点、线和文本中size=
和linewidth=
之间的关系。下面我尝试演示我的困惑。
在this tidyverse关于美学规范的文档中,做了以下陈述:
- re:lines(在“线宽”副标题下)。
由于历史错误,线宽的单位大约是0.75毫米。精确地将其设置为1毫米将改变大量现有的图,所以我们坚持这个错误。
- re:points(在“颜色和填充”副标题下)
填充部分的大小由尺寸控制,笔划的大小由笔划控制。每个以mm为单位测量,点的总尺寸为两者之和。
- re:text(在“字体大小”副标题下)
文本的大小以毫米为单位。这是不常见的,但使文本的大小与线和点的大小一致。
考虑到这些,似乎所有三个都是以mm为单位测量的。[旁注:除了在element_text()
中使用size=
时,其中单位是pts。]我对这种语言的解释是,对于相同的size=
和linewidth=
,文本和点(实际上是size=
+ stroke=
)应该是相同的大小,但由于“历史错误”,行会更小。
然而,我下面的实验并不支持这一点。
ggplot() +
geom_hline(yintercept=1,linewidth=20) +
geom_text(data=data.frame(x=0.5,y=1,label="Text"),
mapping=aes(x=x,y=y,label=label),
size=20,color="red") +
geom_point(data=data.frame(x=0.4,y=1),mapping=aes(x=x,y=y),
pch=21,size=10,stroke=10,fill="red",color="blue") +
geom_point(data=data.frame(x=0.6,y=1),mapping=aes(x=x,y=y),
pch=21,size=20,stroke=0,fill="orange") +
geom_point(data=data.frame(x=0.7,y=1),mapping=aes(x=x,y=y),
pch=21,size=0,stroke=20,color="green") +
geom_point(data=data.frame(x=0.8,y=1),mapping=aes(x=x,y=y),
pch=21,size=10,stroke=10*0.75,fill="orange",color="green") +
scale_x_continuous(limit=c(0.35,0.85)) +
theme_void()
好像...
- 我的文本和行是相同的高度...我期望行更小。
- 我的蓝点和红点比线和文字大...我期望它和文字一样。
- 我的橙子点(只是
size=
)和绿点(只是stroke=
)的大小不一样......我期望它们相等,因为size=
+stroke=
给出了点的“大小”。 - 我的橙子和绿点等于橙色点(不确定我在这里期望什么)。
关于我在这里错过了什么的想法?谢谢。
我确实在Posit Community上问了同样的问题,但只收到了一个回复,这真的无助于减轻我的困惑。
1条答案
按热度按时间7vux5j2d1#
可能是窃听器。或者是故意的我漏掉了什么。
我看了一下
GeomPoint$draw_panel
。对于pointsGrob
,符号的fontsize
和lwd
被给定/计算为其中
.pt = 2.845276
而.stroke = 3.779528
。因此,对size
和stroke
应用了不同的转换,恕我直言,这就是为什么点的大小不会像文档中所述的那样增加到size+stroke
,即使对于小的点大小几乎不可见。这也可以通过将校正因子添加到冲程来“确认”,即通过乘以
.pt / .stroke
:基于文档中示例的另一个问题示例: