Bạn luôn có thể tạo ra các âm mưu bằng tay: với đồ họa cơ bản, bạn fig
tham số cho phép bạn thêm âm mưu bên trong âm mưu khác.
# Sample data
n <- 100
k <- 6
d <- matrix(rnorm(k*n),nc=k)
d[,2] <- d[,1] # To help check the results
colnames(d) <- LETTERS[1:k]
x <- apply(d,2,cumsum)
r <- hclust(dist(t(d)))
# Plot
op <- par(mar=c(0,0,0,0),oma=c(0,2,0,0))
plot(NA,ylim=c(.5,k+.5), xlim=c(0,4),axes=FALSE)
# Dendrogram. See ?hclust for details.
xc <- yc <- rep(NA,k)
o <- 1:k
o[r$order] <- 1:k
for(i in 1:(k-1)) {
a <- r$merge[i,1]
x1 <- if(a<0) o[-a] else xc[a]
y1 <- if(a<0) 0 else yc[a]
b <- r$merge[i,2]
x2 <- if(b<0) o[-b] else xc[b]
y2 <- if(b<0) 0 else yc[b]
lines(
3+c(y1,i,i,y2)/k,
c(x1,x1,x2,x2),
lwd=k-i
)
xc[i] <- (x1+x2)/2
yc[i] <- i
}
# Time series
axis(2,1:k,colnames(d)[r$order],las=1)
u <- par()$usr
for(i in 1:k) {
f <- c(0,3,i-.5,i+.5)
f <- c(
(f[1]-u[1])/(u[2]-u[1]),
(f[2]-u[1])/(u[2]-u[1]),
(f[3]-u[3])/(u[4]-u[3]),
(f[4]-u[3])/(u[4]-u[3])
)
par(new=TRUE,fig=f)
plot(x[,r$order[i]],axes=FALSE,xlab="",ylab="",main="",type="l",col="navy",lwd=2)
box()
}
par(op)
(Sau khi viết những dòng này, tôi nhận ra rằng nó có lẽ là dễ dàng hơn để làm với layout
...)
1 Cảm ơn bạn rất nhiều cho việc này! Thực sự là một cách tiếp cận đẹp :) – Legend
Điều này thật tuyệt vời! Bất kỳ cơ hội nào bạn sẵn sàng chú thích mã một chút để giúp người khác tìm hiểu và dễ dàng thấy được những gì đang xảy ra trong mã? – Jota
Tôi có thể thứ hai @Frank. Một số chú thích sẽ tốt đẹp! – by0