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

ラベル レンダラーでは、すべてのラベルが線とラベルの組み合わせとして描画されます。このクラスでは、グラフを使用してレイアウトにアイテムを追加するだけです。

これはまったくきれいではありません...特に、ラベル用に線(実際には1ピクセル)がまだレンダリングされていますが、私は怠け者で、これは私のニーズに合っています...必要に応じてこれを改善できると思いますが、おそらく、軸レンダラーに到達して、ラベル項目に線を描画しないようにする必要があります。

この操作についてご不明な点がございましたら、お気軽にお問い合わせください。

    @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 に答える