If you're not stuck with R or Matlab, you can do interactive 3D plots with three.js and WebGL-capable web browsers. Examples are available here - specifically, the example of interest will likely be the interactive particles demo, which can be modified for your case to display a matrix of interactive points in 3D space.
For annotations, my own explorations would suggest that you create text elements out of SVG, render them to a canvas with canvg and then programmatically set as a texture map for another particle in 3D space when a relevant interaction event (i.e., a mouseover event) takes place. You might show an experiment name, cell type, etc. when mousing over a point in space.
I'm still working out how to render these into vector outputs for publication-quality figures. These use the WebGL rendering capabilities built into Safari, Chrome and Firefox browsers, and three.js's SVGRenderer component is simply not as capable as the WebGL engine. Most likely, in order to make a vector-quality figure I will pass parameters in an Ajax request to an R instance running rgl in the back-end, which spits a PDF file back at the client. So if you need to make figures from this approach, I suspect that this is likely going to be a bit more work.
However, if you just want to render an interactive visualization, you could pass a matrix file URL to a three.js client in a GET request, and then the client does all the work of showing an animation. You can also attach an orbit-control handler to deal with click, drag and zoom events, to change the camera angle and depth.