Perhaps the easiest way to achieve a result that looks like what, in my opinion, is the requested output, could be to use the lattice package:
set.seed(12358) x <- runif(10) y <- runif(10) z <-(x+y)*(xy) x1<-x+y y1<-xy library(lattice) df<-data.frame(x=x1,y=y1,z=z) levelplot(z~x1*y1,df,cuts=9,col.regions=grey.colors(10)[10:1])

But admittedly, this does not look very pretty. Probably the best way to present the data is through an interactive 3D scatter chart, which can be generated with the rgl package, as shown below. For this diagram, I used a function from Winston Chang's "R Graphics Cookbook" to draw vertical blue lines:
library(rgl) plot3d(x1,y1,z, size=1,type="s") interleave <- function(v1,v2) as.vector(rbind(v1,v2)) segments3d(interleave(x1,x1), interleave(y1,y1), interleave(z,0),alpha=0.4,col="blue") planes3d(a=0,b=0,c=1,d=0,alpha=0.1)

Since the OP clearly stated that interpolation is not required, I refrain from publishing simple features for displaying such continuous heatmaps, although I believe that for this type of dataset it usually makes sense to interpolate the data.
In fact, I have some difficulties in understanding the use of a heat map (which, in my opinion, is a 2D object) applied to an unstructured set of unconnected points.