DScience:3D representation of data
30% complete | ||
|
3D plots use 3D computer graphics to represent scientific data. Data are usually defined as [math]\displaystyle{ Z=f(X,Y) }[/math], where [math]\displaystyle{ (X,Y,Z) }[/math] values by a function or actual data. There are a number of possible types of 3D plots. You can use the following Java classes to plot data in 3D: jhplot.HPlot3D, jhplot.HPlotXYZ, jhplot.HPlot3DP, jhplot.HVisAd, jhplot.HPlotMX. See additional details in DMelt:Plots/5_Plots_in_3D.
Bar plots or histograms
A bar plot draws a three-dimensional bar chart, where each element in Z corresponds to one bar. To make such plots from a 3D histogram use the Java class jhplot.H2D. Here is the Python code with an example:
from jhplot import HPlot3D,SHPlot3D,H2D from java.util import Random # build a standard canvas c1 = HPlot3D("Canvas",600,400) # build a singleton # c1=SHPlot3D.getCanvas() c1.setGTitle("Global title") c1.setNameX("Xaxis") c1.setNameY("Yaxis") c1.visible(1) h1 = H2D("My 2D Test",20,-3.0, 3.0, 20, -3.0, 3.0) rand = Random(); for i in range(500): h1.fill(rand.nextGaussian(),rand.nextGaussian()) c1.draw(h1); # export to some image (png,eps,pdf,jpeg...) # c1.export(Editor.DocMasterName()+".png")
Surface plots
Here is an example of surface plots:
from jhplot import * from java.awt import Color from java.util import Random c1=HPlotXYZ("test",600,400) c1.setGTitle("3D function") c1.visible() c1.setTickDecimalAll(1) hh=H2D("Histogram",20,-2,2,20,-20,20) rand = Random() for i in range(10000): hh.fill(rand.nextGaussian(),5*rand.nextGaussian()) c1.setLegendBar() c1.addAsSurface(hh) c1.animate() c1.update()
Scattered data
Here is an example that use two data points (blue and red):
from jhplot import * from java.util import Random from java.awt import Color c1 = HPlot3D("Canvas",500,500) c1.setGTitle("Interactive 3D galaxy") c1.setRange(-10,10,-10,10,-10,10) c1.setNameX("X") c1.setNameY("Y") c1.visible(1) # create P2D objects in 3D p1= P2D("Galaxy") p1.setSymbolSize(2); p1.setSymbolColor(Color.blue); rand = Random() for i in range(5000): x=3*rand.nextGaussian() y=3*rand.nextGaussian() z=0.4*rand.nextGaussian() p1.add(x,y,z) c1.draw(p1) h2=P2D("Core") h2.setSymbolSize(2) h2.setSymbolColor(Color.yellow) for i in range(5000): x=0.9*rand.nextGaussian() y=0.9*rand.nextGaussian() z=0.8*rand.nextGaussian() h2.add(x,y,z) c1.draw(h2)
Mixed plots
One can overlay scattered data with surface plots, bar plots in arbitrary way. Typically, you need to use jhplot.HPlot3D canvas.
Example code
Learn about different types of 3D plots in Plots3D and histograms. |