我需要自动生成一个图,其中点通过一条线连接到它们的标签(在外面)。有没有办法在R?中做到这一点。 提前谢谢。
见这里的一个例子: https://www.dropbox.com/s/4tepdp5j13ot2dd/Example.png?dl=0
答案 0 :(得分:2)
set.seed(1)
x <- rnorm(10)
lab <- sample(1:10, 5)
par(mar = c(5,4,2,5))
plot(x)
p <- par('usr')
# l <- legend(p[2], p[4], legend = round(x[lab], 2), xpd = NA, bty = 'n')
l <- legend(p[2], p[4], legend = sprintf('Label%s', 1:5), xpd = NA, bty = 'n')
segments(lab, x[lab], l$text$x, l$text$y, xpd = NA, col = seq_along(lab))
答案 1 :(得分:0)
基于@ rawr的解决方案:
set.seed(1)
x <- rnorm(10)
y <- rnorm(10)
z <- letters[1:10]
df<-data.frame(x,y,z)
lab <- df$z
plot(x,y)
p <- par('usr')
l <- legend(p[2], p[4], legend = lab, xpd = NA, bty = 'n')
segments(df$x, df$y, l$text$x, l$text$y, xpd = NA)
但现在让我们说每个标签都有超过1 x,y对:
set.seed(1)
x <- rnorm(20)
y <- rnorm(20)
z <- letters[10:1]
df<-data.frame(x,y,z)[order]
lab <- levels(df$z)
plot(x,y)
p <- par('usr')
l <- legend(p[2], p[4], legend =lab, xpd = NA, bty = 'n')
lab_df<-data.frame(x=l$text$x, y=l$text$y, z=lab)
do_seg<-function(i){
segments(df[df$z==i,]$x, df[df$z==i,]$y, lab_df[lab_df$z==i,]$x, lab_df[lab_df$z==i,]$y, xpd = NA)
}
lapply(lab,do_seg)
给我们: