RE: ListPlot vs ListPlot3D
- To: mathgroup at smc.vnet.net
- Subject: [mg28935] RE: [mg28884] ListPlot vs ListPlot3D
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.de>
- Date: Sat, 19 May 2001 22:27:52 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Please see below: > -----Original Message----- > From: Otto Linsuain [SMTP:linsuain+ at andrew.cmu.edu] To: mathgroup at smc.vnet.net > Sent: Thursday, May 17, 2001 10:23 AM > To: mathgroup at smc.vnet.net > Subject: [mg28884] ListPlot vs ListPlot3D > > > Dear Mathematica experts, I was wondering if there is a way of plotting > a 3D graph using a rectangular array of z-values USING THE CORRESPONDING > VALUES OF X AND Y. > > Here is what I mean: > > with a 2D plot, one can do: > > ListPlot[ {y1,y2,y3,.........yn} ] and this will give a graph of the > points > > {y1,1} ,{y2,2}, {y3,3},....{yn,n}, i.e. it will use the integers > 1,2,3,...n as the x values. > > One can, however, write > > ListPlot[ { {x1,y1}, {x2,y2}, {x3,y3}, ... {xn,yn} }] > > and get a graph with user-specified values for x and y. > > There doesn't seem to be an analogous thing for ListPlot3D. The values > of x and y seem to be always {1,1}, {1,2},{2,1},{2,2},.......{n,n} > > Any ideas? Thanks in advance. Otto Linsuain. > [Hartmut Wolf] Otto, let me make up an example: Let's assume we have a regular, but not evenly spaced grid for xy-values: xgrid=Table[Pi*Sin[x],{x,0,Pi/2,Pi/2/14}]; ygrid=Table[Pi/2*Sin[y],{y,-Pi/2,Pi/2, Pi/14}]; xygrid=Outer[List,xgrid,ygrid]; and z-values for say function Sin[x]*Cos[y] sampled at the grid. tt=Apply[Sin[#1]Cos[#2]& ,xygrid,{2}]//N; If we plot it with ListPlot3D we certainly get a distorted view gg=ListPlot3D[Transpose[tt]] - SurfaceGraphics - What we have to do, is to shift the integer grid of ListPlot3D to the real, true xy-Grid of the problem. We cannot do that with SurfaceGraphics, so we convert that to a Graphics3D object. gg1=Graphics3D[gg]; Show[gg1]; So far display is unchanged, but now we can put the points onto the real grid: gg2=gg1/.Polygon[points_] :> Polygon[points/. {x_,y_,z_} :> xgrid[[Round[x]]], ygrid[[Round[y]]],z}] - Graphics3D - Show[gg2] - Graphics3D - Compare that with Plot3D[Sin[x]Cos[y],{x,0,Pi},{y,-Pi/2,Pi/2}] - SurfaceGraphics - and we watch the same 3D-shape, however at different grids. So we have got the "real" plot, sampled at our own regular, yet not-equally spaced grid by only use of the original data. And the axes come out correctly too. This method of transformation also may be used to get a more dense sampling at regions of special interest (e.g. at rapid variation). The grid still has to stay regular though. -- Hartmut