prefuse轴标题

时间:2012-08-25 00:31:05

标签: title 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);

1 个答案:

答案 0 :(得分: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);
        }
    }
   }