如何在R的基本图上叠加热图?

时间:2018-06-07 19:08:54

标签: r plot heatmap

a half football field draw by plot()

enter image description here

这就是我如何策划这个足球场。

par(bg="transparent")
plot(0,0,type="n",xlim=c(-50,50),ylim=c(0,60),ann=F,axes=F,xaxt="n",yaxt="n"
library("jpeg")
ima=readJPEG("C:/Users/USER/Desktop/g5.jpg")
lim=par()
rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
segments(35,65,35,40,col="white",lwd=3)
segments(-35,65,-35,40,col="white",lwd=3)
segments(-35,40,35,40,col="white",lwd=3)
segments(14,65,14,55,col="white",lwd=3)
segments(-14,65,-14,55,col="white",lwd=3)
segments(-14,55,14,55,col="white",lwd=3)
par(new=T)
curve(sqrt(14^2-x^2)-3,xlim=c(-50,50),ylim=c(0,60),axes="F",ann="F",col="white",lwd=3)

par(new=T)
curve(-sqrt(14^2-x^2)+50,xlim=c(-50,50),ylim=c(0,60),from=-sqrt(96),to=sqrt(96),axes="F",ann="F",col="white",lwd=3)
par(new=T)
curve(-sqrt(5^2-(x+54)^2)+62.5,xlim=c(-50,50),ylim=c(0,60),from=-54,to=-49,axes="F",ann="F",col="white",lwd=3)
par(new=T)
curve(-sqrt(5^2-(x-54)^2)+62.5,xlim=c(-50,50),ylim=c(0,60),from=49,to=54,axes="F",ann="F",col="white",lwd=3)
box(which="plot",col="white",lwd=3)

我想在它上面添加一个热图,如下图所示:

what I expect to plot

enter image description here

我已经尝试了很多绘制热图的方法,但我遇到的常见问题是我不知道如何将热图放在我绘制的足球场上。 对不起,我是R的初学者,所以我认为这是我做这个的最简单方法(重叠)。 谢谢!

1 个答案:

答案 0 :(得分:0)

如何将image函数与add=TRUE一起使用,其中使用矩阵指定要添加的区域。

这是一个简单(而且很无聊)的例子。

## Create raster image
plot(c(100, 250), c(300, 450), type = "n", xlab = "", ylab = "")
image <- as.raster(matrix(0:1, ncol = 5, nrow = 3))
rasterImage(image, 100, 300, 150, 350, interpolate = FALSE)

## Add an area
newarea <- matrix(NA, nrow=150, ncol=150)
newarea[100:140,100:110] <- 3
newarea[100:140,110:120] <- 4
image(x=100:250, y=300:450, z=newarea, add=T)

重要的是要确保在x函数的第二次调用中yimage对应于第一个图的x和y限制,否则新区域不会被看到。