我是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解决方案的结果产生了这样的结果:
UPDATE2
托马斯结果:
答案 0 :(得分:3)
这是reshape2
和ggplot2
的方法:
# 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))
答案 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)
结果: