заголовок оси 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);

person kzo    schedule 25.08.2012    source источник


Ответы (1)


Вы должны сделать это вручную. Я сделал это, и мой код с открытым исходным кодом, поэтому вы можете взглянуть на него:

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);
        }
    }
   }
person bcr    schedule 28.08.2012