我想在r:
中创建这样一个图表
我有一个这样的矩阵
[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
我希望有一个图表,
r中是否有任何包或方法可以完成这项工作?我怎么能这样做?
答案 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)
答案 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)
答案 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)
或者如果你更喜欢点而不是细胞:
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