2009-04-27 45 views
1

我目前得到prefuse來繪製散點圖,其中X軸是計算機名稱,Y軸是它的溫度。如何讓它繪製顯示值而不是離散點的條?如何使用Java prefuse庫創建條形圖?

我目前使用下面的代碼來渲染點:

ShapeAction shape = new ShapeAction(group, Constants.SHAPE_RECTANGLE); 
ColorAction strokeColor = new DataColorAction(group, dataType, Constants.NUMERICAL, VisualItem.STROKECOLOR, colorPalette); 

ActionList draw = new ActionList(); 
draw.add(shape); 
draw.add(strokeColor); 
draw.add(new ColorAction(group, VisualItem.FILLCOLOR, 0)); 
draw.add(new RepaintAction()); 
m_vis.putAction("draw", draw); 

我將如何適應,而不是在每個點一個小廣場這個代碼來獲得,一個厚厚的酒吧從日的底部會該圖的重點?

謝謝。

回答

1

我想我應該指出我是如何做到的 - 畢竟,堆棧溢出應該也是一個存儲庫。在代碼較早是以下內容:

m_vis.setRendererFactory(new RendererFactory() { 
    Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP); 
    Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM); 
    Renderer barRenderer = new ShapeRenderer(); 

    public Renderer getRenderer(VisualItem item) { 
     return item.isInGroup("yAxis") ? yAxisRenderer : 
       item.isInGroup("xAxis") ? xAxisRenderer : 
       barRenderer; 
    } 
}); 

我擴展形狀渲染器總是返回正確的寬度和高度的矩形,並定位其到它應該是的左半邊的酒吧。如果你想把你的酒吧放在中心位置,你需要自己做 - 預先熔合不會幫助你。

m_vis.setRendererFactory(new RendererFactory() { 
    Renderer yAxisRenderer = new AxisRenderer(Constants.LEFT, Constants.TOP); 
    Renderer xAxisRenderer = new AxisRenderer(Constants.CENTER, Constants.FAR_BOTTOM); 
    Renderer barRenderer = new ShapeRenderer() { 
     protected Shape getRawShape(VisualItem item) { 
      double x = item.getX(); 
      double y = item.getY(); 
      if (Double.isNaN(x) || Double.isInfinite(x)) 
       x = getInsets().left + axisWidth + totalBarWidth/2; 
      if (Double.isNaN(y) || Double.isInfinite(y)) 
       y = 0; 

      double width = totalBarWidth/(barCount + 1) - barGap; 
      double height = getHeight() - getInsets().bottom - axisHeight - y; 
      x -= width/2; 

      return rectangle(x, y, width, height); 
     } 
    }; 

    public Renderer getRenderer(VisualItem item) { 
     return item.isInGroup("yAxis") ? yAxisRenderer : 
       item.isInGroup("xAxis") ? xAxisRenderer : 
       barRenderer; 
    } 
}); 
+0

可否請你看看一個更prefuse問題在http://stackoverflow.com/questions/2273068/how-to-display-3-nodes-with-3-diff-shapes-in- prefuse-library-for-java – 2010-02-16 14:29:38