2012-08-25 46 views
0

如何在prefuse散點圖中給出軸的標題?prefuse軸標題

目前我的代碼讀取文件中的數據,x軸和y軸的範圍都在代碼中工作。我現在需要做的是爲軸添加標題/名稱。我現在的代碼顯示:

//set up the actions 
AxisLayout xaxis = new AxisLayout(group, "GD", 
Constants.X_AXIS, VisiblePredicate.TRUE); 

AxisLayout yaxis = new AxisLayout(group, POINTS, 
Constants.Y_AXIS, VisiblePredicate.TRUE); 

//yaxis.setScale(Constants.LOG_SCALE); 
yaxis.setRangeModel(receiptsQ.getModel()); 
receiptsQ.getNumberModel().setValueRange(0,120,0,120); 

xaxis.setLayoutBounds(m_dataB); 
yaxis.setLayoutBounds(m_dataB); 

// sets group,axis,values,bounds 
AxisLabelLayout ylabels = new AxisLabelLayout("ylab", yaxis, m_ylabB); 
NumberFormat nf= NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(0); 
ylabels.setNumberFormat(nf); 

// AxisLabelLayout xlabels = new AxisLabelLayout("goal diff", xaxis, m_xlabB, 15); 
AxisLabelLayout xlabels = new AxisLabelLayout("xlab",xaxis,m_xlabB,5); 

// vis.putAction("xlabels", xlabels); 
vis.putAction("xlabels", xlabels); 

回答

0

你必須手工完成。我這樣做,我的代碼是開源的,所以歡迎您來看看它:

https://github.com/brycecr/msmexplorer/blob/acacia/MSMExplorer/src/edu/stanford/folding/msmexplorer/util/axis/AxisRotateRenderer.java

https://github.com/brycecr/msmexplorer/blob/acacia/MSMExplorer/src/edu/stanford/folding/msmexplorer/util/axis/AxisLabelLabelLayout.java

在標籤渲染器,所有的標籤都畫成線條和標籤的組合。在這個類中,我們只是用圖形添加一個額外的項目到佈局中。

這根本不是超級乾淨...特別是,一條線(實際上是一個像素)仍然呈現爲標籤,但我很懶,這適合我的需求...我認爲你可以改善這一點如果有必要,但您可能需要到達軸渲染器並使其不爲您的標籤項目繪製線條。

讓我知道如果您對此操作有任何疑問。

@Override 
    public void run(double frac) { 
     super.run(frac); 

     setLabPos(item, length/2.0d + width, bounds); 
    } 

    /** 
    * Set the layout values for an axis label item. 
    */ 
    protected void setLabPos(VisualItem item, double xOrY, Rectangle2D b) { 
     switch (getAxis()) { 
      case Constants.X_AXIS: 
       xOrY = super.isAscending() ? xOrY + b.getMinX() : b.getMaxX() - xOrY; 
       PrefuseLib.updateDouble(item, VisualItem.X, xOrY); 
       PrefuseLib.updateDouble(item, VisualItem.Y, b.getMaxY() + label.getFont().getSize()/3.0d + gridLab.getFont().getSize()); 
       PrefuseLib.updateDouble(item, VisualItem.X2, xOrY); 
       PrefuseLib.updateDouble(item, VisualItem.Y2, b.getMaxY() + label.getFont().getSize()/3.0d + gridLab.getFont().getSize()); 
       break; 
      case Constants.Y_AXIS: 
       xOrY = super.isAscending() ? b.getMaxY() - xOrY - 1 : xOrY + b.getMinY(); 
       PrefuseLib.updateDouble(item, VisualItem.X, b.getMinX()); 
       PrefuseLib.updateDouble(item, VisualItem.Y, xOrY); 
       PrefuseLib.updateDouble(item, VisualItem.X2, b.getMinX()); 
       PrefuseLib.updateDouble(item, VisualItem.Y2, xOrY); 
     } 
    } 
    }