2016-11-14 123 views
0

我正在使用orson圖表的Chart3D來製作曲面圖,並且由於某種原因圖形沒有正確着色漸變。該代碼是下面:Orsoncharts chart3D表面渲染不起作用

@SuppressWarnings("serial") 
Function3D function = new Function3D() { 
    @Override 
    public double getValue(double x, double z) { 
     double xKey = Math.round(x * 100)/100; 
     double zKey = Math.round(z * 100)/100; 
     if(plotValues.containsKey(new Point2D(xKey,zKey))) { 
      return plotValues.get(new Point2D(xKey,zKey)); 
     } else { 
      return 0; 
     } 
    } 
}; 

String xTitle = factorSweepComboBox.getSelectionModel().getSelectedItem(); 
String yTitle = outputComboBox.getSelectionModel().getSelectedItem(); 
String zTitle = factorSweep2ComboBox.getSelectionModel().getSelectedItem(); 

// Create surface plot 
Chart3D chart = Chart3DFactory.createSurfaceChart(
     "", 
     "", 
     function, xTitle, yTitle, zTitle); 

XYZPlot xyzplot = (XYZPlot) chart.getPlot(); 
xyzplot.setDimensions(new Dimension3D(10, 10, 10)); 
ValueAxis3D xAxis = xyzplot.getXAxis(); 
xAxis.setRange(xLow, xUp); 
ValueAxis3D zAxis = xyzplot.getZAxis(); 
zAxis.setRange(zLow, zUp); 
ValueAxis3D yAxis = xyzplot.getYAxis(); 
yAxis.setRange(yLow, yUp); 
SurfaceRenderer renderer = (SurfaceRenderer) xyzplot.getRenderer(); 
renderer.setColorScale(new GradientColorScale(new Range(yLow, yUp), 
     Color.BLUE, Color.YELLOW)); 
Chart3DViewer chartPanel = new Chart3DViewer(chart);  
chartPane.getChildren().addAll(chartPanel); 

plotValues是一個HashMap映射(X,Z)的2D點到一個雙Y輸出值。 xLow,xUp等是範圍值,並且都被正確設置。 yLow和yUp是我希望他們成爲的。但是,當我運行代碼時,我的表面都是一種顏色,即使鍵看起來正確,也沒有漸變。我也試過:

SurfaceRenderer renderer = new SurfaceRenderer(function); 
renderer.setColorScale(new GradientColorScale(new Range(yLow, yUp), 
           Color.BLUE, Color.YELLOW)); 
xyzplot.setRenderer(renderer); 

和結果是一樣的。這裏是一個截圖的鏈接:http://i.imgur.com/F2iYFh1.png

回答

0

我發現了這個問題。這是由於我的函數只能返回離散的x和z值的實際值,如果(x,z)的集合與我自己的數據散列中的集合相匹配,則這些值是有效的。但是,表面渲染器在繪製表面以確定顏色時使用數據集中兩個「x」和「z」之間的中點,並且因爲中間點不在散列中,所以返回0,從而使得整個表面一種顏色。