如何绘制间隔很好的数据标签?

时间:2015-07-12 08:49:15

标签: r plot

在图中标记数据点可能会变得难以处理: enter image description here

随机抽样几个标签可能会令人失望: enter image description here

选择一小组间隔很小的数据标签会有什么好处?也就是说,随机选择标签不重叠的代表。

# 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))

3 个答案:

答案 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))

enter image description here

答案 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)

enter image description here

答案 2 :(得分:1)

另一种方法是随机选择一个点,抛出所有邻近点,依此类推,直到没有任何一点为止:

Rj > Ri

enter image description here