0

如何在 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);
4

1 回答 1

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);
        }
    }
   }
于 2012-08-28T05:38:39.097 回答