我正在尝试用ggplot2
R 制作一个带标签的气泡图。这是简化的场景:
我有一个包含 4 个变量的数据框:3 个定量变量 、x
和y
,z
以及另一个标记点的变量 ,lab
。
我想制作一个散点图,其中位置由x
和确定y
,点的大小由 确定z
。然后,我想将文本标签放置在点旁边(例如,点的右侧),而不会将文本重叠在点的顶部。
如果点的大小没有变化,我可以尝试geom_text
通过添加缩放常数(例如aes(x=x+1, y=y+1)
)来简单地修改图层的美感。但是,即使在这种简单的情况下,我也无法正确定位文本,因为这些点不会随绘图的输出尺寸缩放。换句话说,点的大小在 500x500 和 1000x1000 的图中保持不变——它们不会随着输出图的尺寸放大。
因此,我认为我必须通过输出图的大小(例如尺寸)来缩放标签的位置,或者我必须以ggplot
某种方式获取点的半径并移动我的文本标签。有没有办法做到这一点ggplot2
?
这是一些代码:
# Stupid data
df <- data.frame(x=c(1,2,3),
y=c(1,2,3),
z=c(1,2,1),
lab=c("a","b","c"), stringsAsFactors=FALSE)
# Plot with bad label placement
ggplot(aes(x=x, y=y), data=df) +
geom_point(aes(size=z)) +
geom_text(aes(label=lab),
colour="red") +
scale_size_continuous(range=c(5, 50), guide="none")
编辑:我应该提一下,我在 geom_text 内部尝试过hjust
,vjust
但它没有产生预期的效果。
# Trying hjust and vjust, but it doesn't look nice
ggplot(aes(x=x, y=y), data=df) +
geom_point(aes(size=z)) +
geom_text(aes(label=lab), hjust=0, vjust=0.5,
colour="red") +
scale_size_continuous(range=c(5, 50), guide="none")
编辑:感谢 Henrik 和 shujaa,我设法得到了现在可以使用的东西。我会留下这个问题,以防有人分享更通用的解决方案。
只是我使用它的一个简介:我正在绘制一张地图,并用一个与观察到的降水量成正比的点来指示某些站点的降水量。我想以美观的方式在每个点旁边添加一个电台标签。我将为不同的区域制作更多这些图,并且我的输出图对于每个图可能具有不同的分辨率或比例(例如,由于不同的投影),因此需要一个通用的解决方案。position_jitter
如果我周末有时间,我可能会尝试创建一个自定义,就像巴蒂斯特建议的那样。