2012-08-25 43 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); 
     } 
    } 
    }