我在R中创建了一个折线图(图表),每个数据点都有标签。由于数据点数量众多,因此标签的图形变得非常完整。我想仅为最后N个(比如4个)数据点应用标签。我在 geom_label_repel 函数中尝试了子集和 tail ,但无法将它们视为我们或得到错误消息。我的数据集由99个值组成,分布在3组(KPI)上。
我在R中有以下代码:
library(ggplot)
library(ggrepel)
data.trend <- read.csv(file=....)
plot.line <- ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) +
geom_line(aes(group = KPI), size = 1) +
geom_point(size = 2.5) +
# Labels defined here
geom_label_repel(
aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)),
box.padding = unit(0.35, "lines"),
point.padding = unit(0.4, "lines"),
segment.color = 'grey50',
show.legend = FALSE
)
);
我很公平,我对R很新。也许我会错过一些基本的东西。
提前致谢。
答案 0 :(得分:6)
最简单的方法是将data =
中的geom_label_repel
参数设置为仅包含您想要标记的点。
这是一个可重复的例子:
set.seed(1235)
data.trend <- data.frame(Version = rnorm(25), Value = rnorm(25),
group = sample(1:2,25,T),
KPI = sample(1:2,25,T))
ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) +
geom_line(aes(group = KPI), size = 1) +
geom_point(size = 2.5) +
geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)),
data = tail(data.trend, 4),
box.padding = unit(0.35, "lines"),
point.padding = unit(0.4, "lines"),
segment.color = 'grey50',
show.legend = FALSE)
不幸的是,这与使用排斥算法略有混淆,使得标签放置相对于未标记的其他点不是最理想的(您可以在上图中看到某些点被标签覆盖)。
因此,更好的方法是使用color
和fill
来简单地使不需要的标签不可见(通过将颜色和填充设置为NA
你要隐藏的标签):
ggplot(data=data.trend, aes(x = Version, y = Value, group = KPI, color = KPI)) +
geom_line(aes(group = KPI), size = 1) +
geom_point(size = 2.5) +
geom_label_repel(aes(Version, Value, fill = factor(KPI), label = sprintf('%0.1f%%', Value)),
box.padding = unit(0.35, "lines"),
point.padding = unit(0.4, "lines"),
show.legend = FALSE,
color = c(rep(NA,21), rep('grey50',4)),
fill = c(rep(NA,21), rep('lightblue',4)))