将矩阵绘制为散点图并连接每列中的最大点

时间:2014-02-26 12:22:43

标签: r matrix plot

我是R的新手,坚持这个问题。 我有整数值矩阵,我想将其绘制为矩阵,其中点的大小对应于整数的值。因此,一个单元格的值越大,该点越大。最后,我想用一条线将每列的最大值连接在一起。

m <- matrix(sample(1:15,15),nrow=3,ncol=5)
dimnames(m)<-list(c("r1","r2","r3"),c("c1","c2","c3","c4","c5"))

> m
   c1 c2 c3 c4 c5
r1  2  4  8  7  5
r2  1  9  6 13  3
r3 12 14 15 10 11

例如,我的情节应包含15个点,其中x轴显示c1,c2,c3,c4和y轴r1,r2,r3。最后应连接m(r3,d1),m(r3,c2),m(r3,c3),m(r2,c4)和m(r3,c5)。 我尝试使用matplot

 matplot(my[,-1],my[,1],type='p',pch=1)

但它不会产生我想要的东西。

更新 我有一个非常spars矩阵,所以有些列只有零值。在这种情况下,它应该只考虑其中之一。 sven解决方案的结果产生了这样的结果: enter image description here

UPDATE2

托马斯结果: enter image description here

2 个答案:

答案 0 :(得分:3)

这是reshape2ggplot2的方法:

# The matrix (m):
   c1 c2 c3 c4 c5
r1  8  6  5  2 15
r2 12  9 10 13 14
r3  1  7  4 11  3


# transform data
library(reshape2)
dat <- melt(m, varnames = c("y", "x"))
dat <- transform(dat, max = ave(value, x, FUN = function(x) 
        replace(integer(length(x)),  which.max(x), 1L)))

# create plot
library(ggplot2)
ggplot(dat, aes(x = x, y = y)) + 
  geom_point(aes(size = value)) +
  geom_line(data = subset(dat, as.logical(max)), aes(group = 1))

enter image description here

答案 1 :(得分:3)

这是一个基本图形解决方案:

# reproducible data
set.seed(1)
m <- matrix(sample(1:15,15),nrow=3,ncol=5)
dimnames(m)<-list(c("r1","r2","r3"),c("c1","c2","c3","c4","c5"))

情节:

e <- expand.grid(1:nrow(m), 1:ncol(m))
plot(e[,2], e[,1], cex=sqrt(m), xlim=c(0,6), ylim=c(0,4), pch=21, bg='black')
lines(1:ncol(m), apply(m,2,which.max), lwd=2)

结果:

enter image description here