r - 避免使用 ggplot2::coord_polar 重叠文本标签
问题描述
我有一个极坐标系上的点图。每个点都有一个相关的标签,应该以给定的角度显示在绘图周围。这可以使用axis.text或geom_text来实现;我在这里使用了 geom_text。不幸的是,文本标签重叠。使用 position = position_jitter() 显然只允许按高度抖动,但不能按宽度抖动(即,不能解决问题)。MWE:
df <- data.frame("angle" = runif(50, 0, 359),
"projection" = runif(50, 0, 1),
"labels" = paste0("label_", 1:50))
ggplot(data = df, aes(x = angle, y = projection, label = labels)) +
geom_point() +
coord_polar() +
theme_minimal() +
geom_text(aes(x=angle, y=1.1,
label=labels),
size = 3)
我想抖动标签,使它们不重叠,但留在绘图区域之外。我还尝试使用角度参数有条件地调整标签以腾出更多空间,但无法找出正确的公式来使角度起作用。
编辑:这是创建绘图的另一种方法,使用 scale_x_continuous 将标签创建为axis.text.x。然而,这确实会再次导致标签重叠。
ggplot(data = df, aes(x = angle, y = projection, label = labels)) +
geom_point() +
coord_polar() +
scale_x_continuous(limits = c(0, 360), expand = c(0, 0), breaks = df$angle, labels=df$labels) +
theme_minimal() +
theme(panel.grid = element_blank())
解决方案
ggrepel
在这种情况下会很好地工作。
library(ggplot2)
library(ggrepel)
df <- data.frame("angle" = runif(50, 0, 359),
"projection" = runif(50, 0, 1),
"labels" = paste0("label_", 1:50))
ggplot(data = df, aes(x = angle, y = projection, label = labels)) +
geom_point() +
coord_polar() +
theme_minimal() +
geom_text_repel(size = 3)
推荐阅读
- python - 使用 sqlalchemy 从表列中选择不包含字符 af 的唯一值
- visual-studio - 如何让 VS 2019 在 System.InvalidCastException 上中断?
- html - 如何在居中对齐容器内的左对齐 div 中居中对齐内容(例如,图像)?
- android - 设备被阻止时 Xamarin.Android 工作缓慢
- python - 我怎样才能最多接受两个参数并在缺少一个时选择默认值
- javascript - 无法读取 Express、VueJS 中未定义的属性“地图”
- python - 如何在 Python 中的模式匹配后提取第 n 行字符串?
- swift - 如何使标签居中以使其在 xcode 10 上的所有模拟器上居中?
- python - 文本不在循环内更新(在函数内)
- node.js - Node.js 编码辅助已禁用且无法打开 [IntelliJ 2019.3]