r中的矩阵图

时间:2014-06-02 16:29:34

标签: r plot

我想在r:

中创建这样一个图表

enter image description here

我有一个这样的矩阵

 [1]   [2]   [3]   [4]   [5] .... [30]

[1] 0.5   0.75  1.5   0.25  2.5 .... 0.51

[1] 0.84  0.24  3.5   0.85  0.25.... 1.75

[1] 0.35  4.2   0.52  1.5   0.35.... 0.75
.
. .......................................
.
[30]0.84  1.24  0.55   1.5  0.85.... 2.75

我希望有一个图表,

  • 如果小于1的值---->绿色圆圈
  • 如果1到2之间的值---->黄色圆圈
  • 两个以上---->红圈

r中是否有任何包或方法可以完成这项工作?我怎么能这样做?

3 个答案:

答案 0 :(得分:6)

要绘制此图,您需要三个数据点:

x, y, color

因此,第一步是重塑 幸运的是,matricies已经是一个向量,只需要一个维度属性,所以我们只需要创建一个x,y坐标的data.frame。我们使用expand.grid执行此操作。

# create sample data. 
mat <- matrix(round(runif(900-30, 0, 5),2), 30)

创建(x,y)data.frame 请注意,y的序列,x 列的序列

dat <- expand.grid(y=seq(nrow(mat)), x=seq(ncol(mat)))

## add in the values from the matrix. 
dat <- data.frame(dat, value=as.vector(mat))

## Create a column with the appropriate colors based on the value.
dat$color <- cut( dat$value, 
                  breaks=c(-Inf, 1, 2, Inf), 
                  labels=c("green", "yellow", "red")
                 )



## Plotting
library(ggplot2)
ggplot(data=dat, aes(x=x, y=y)) + geom_point(color=dat$color, size=7)

sample output

答案 1 :(得分:1)

如果您的数据是相关结果,则corrplot package可能很有用。

  

corrplot包是相关矩阵的图形显示,   置信区间。它还包含一些做矩阵的算法   重新排序。此外,corrplot擅长细节,包括   选择颜色,文字标签,颜色标签,布局等。

基于@RicardoSaporta样本数据的示例图。

library(corrplot)

#sample data
mat <- matrix(round(runif(900, 0, 5),2), 30)

#plot
corrplot(mat, is.corr = FALSE)

enter image description here

答案 2 :(得分:1)

此外,您可以使用基本功能image

mat <- matrix(round(runif(900-30, 0, 5),2), 30)
image(mat,
      breaks=c(min(mat),1,2,max(mat)), #image can't handle Inf but that's not a problem here
      col=c("green","yellow","red"), axes=FALSE)

enter image description here

或者如果你更喜欢点而不是细胞:

grid <- expand.grid(1:nrow(mat),1:ncol(mat)) #Same two steps as in Ricardo Sapporta answer
category <- cut(mat,c(-Inf,1,2,Inf))
plot(grid,                  #Then plot using base plot
     col=c("green","yellow","red")[category], #here is the trick
     pch=19, cex=2, axes=FALSE) #You can customize it as you wish

enter image description here