在图中标记数据点可能会变得难以处理:
随机抽样几个标签可能会令人失望:
选择一小组间隔很小的数据标签会有什么好处?也就是说,随机选择标签不重叠的代表。
# demo data
set.seed(123)
N <- 50
x <- runif(N)
y <- x + rnorm(N, 0, x)
data <- data.frame(x, y, labels=state.name)
# plot with labels
plot(x,y)
text(x,y,labels)
# plot a few labels
frame()
few_labels <- data[sample(N, 10), ]
plot(x,y)
with(few_labels, text(x,y,labels))
答案 0 :(得分:2)
一种方法是通过群集。这是stats::hclust
的解决方案。我们将聚类中的数据点聚集在一起,然后从每个聚类中选择一个随机观察。
few_labels <- function(df, coord=1:ncol(df),grp=5){
require(dplyr)
df$cl <- cutree(hclust(dist(df[,coord])),grp)
few_labels <- df %>% group_by(cl) %>%
do(sample_n(.,1))
return(few_labels)
}
# demo data
set.seed(123)
N <- 50
x <- runif(N)
y <- x + rnorm(N, 0, x)
data <- data.frame(x, y, labels=state.name)
# plot a few labels
frame()
few_labels <- few_labels(data,coord=1:2,grp=12)
plot(x,y)
with(few_labels, text(x,y,labels))
答案 1 :(得分:2)
对于所有标签:
xlims=c(-1,2)
plot(x,y,xlim=xlims)
#text(x,y,data$labels,pos = 2,cex=0.7)
library(plotrix)
spread.labels(x,y,data$labels,cex=0.7,ony=NA)
答案 2 :(得分:1)
另一种方法是随机选择一个点,抛出所有邻近点,依此类推,直到没有任何一点为止:
Rj > Ri