2017-04-03 17 views
1

私の問題:を使用すると、y軸に不均一なパーセンテージのスレッシュホールドを表示する必要があります。たとえば、y軸上の唯一のラベルは、次のようなしきい値にする必要があります。他のすべての座標は空白にする必要があります:y軸のカスタムパーセンテージスレッシュホールド

- 
93% 
85% 
78% 
72% 
66% 
- 
50% 
- 
- 
- 
- 
- 

私は現在のパーセンテージ表示のため、このコードスニペットを使用していますが、これはただの等間隔の割合軸を作成します。

CategoryPlot plot = (CategoryPlot) chart.getPlot(); 

    NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 
    DecimalFormat pctFormat = new DecimalFormat("#.0%"); 
    rangeAxis.setNumberFormatOverride(pctFormat); 

任意の助けをいただければ幸いです!

+0

50%を半分に、80%を4/5にしたいなどですか? – trashgod

+0

はい、相対的な位置を変えてはいけません(対数スケールはありません)、重要な閾値だけにラベルが付くようにしてください。 – ptstone

+0

おそらく 'SymbolAxis'を試してみてください。[here](http://stackoverflow.com/q/2365657/230513)。 – trashgod

答えて

1

これはややハッキングアップされた回答です。私は良い結果を得られる答えをすべてアップビューします。しかし、それは動作します - ここで私は何をしたのですか?

まず、私が使用することを望んでいたdouble値のリストを作成した。その後、私は最初にすべてのデフォルトがTicktype.MINORにダニ設定するNumberAxisにrefreshTicksメソッドを上書き

public static List<Double> m_lPercentageValuesForY = Arrays.asList(0.1,0.2,0.3,0.4,0.5,0.58,0.66,0.70,0.74,0.78,0.82,0.95,1.0); 

、その後、追加し、 Ticktype.MAJORで自分のカスタムティックを作成してください:

NumberAxis axisLeft = new NumberAxis(plot.getRangeAxis().getLabel()) { 
     @Override 
     public List refreshTicks(
       Graphics2D g2, 
       AxisState state, 
       Rectangle2D dataArea, 
       RectangleEdge edge) { 

      List defaultTicks = super.refreshTicks(g2, state, dataArea, edge); 
      List customTicks = new ArrayList(); 

      for (Object aTick : defaultTicks) { 
       NumberTick currenttick = (NumberTick) aTick; 

       customTicks.add(new NumberTick(
         TickType.MINOR, 
         currenttick.getValue(), 
         "", //empty 
         currenttick.getTextAnchor(), 
         currenttick.getRotationAnchor(), 
         currenttick.getAngle())); 
      } 
      NumberTick aTick = (NumberTick) defaultTicks.get(0); 
      for (double dTest : m_lPercentageValuesForY) { 
       customTicks.add(new NumberTick(
         TickType.MAJOR, 
         dTest, 
         String.format("%.0f%%", dTest * 100), //only wanted values are set to major 
         aTick.getTextAnchor(), 
         aTick.getRotationAnchor(), 
         aTick.getAngle())); 
      } 
      return customTicks; 
     } 
    }; 
    plot.setRangeAxis(axisLeft); 
+0

同様のアプローチが提案されている[ここ](http://stackoverflow.com/a/22610568/230513)。 – trashgod

+0

それを発見していただきありがとうございます。jfreechart自身の作成者からもそのことをご存知ありがとうございます。完全にカスタマイズされた軸を作成する公式な方法が必要だったと思っていましたが、この要件はメソッドやクラスを正当化するにはあまりにも稀で、具体的なものでした。私はちょうどstackoverflowに参加して以来、それは答えが自分自身であり、それは素晴らしいではないにもかかわらず、このスレッドをマークすることは大丈夫ですか? – ptstone

+0

[あなた自身の質問に答えてください](http://meta.stackoverflow.com/q/17463/163188);左の[空のチェックマーク](http://meta.stackoverflow.com/a/5235/163188)をクリックしてこの回答を受け入れることができます。あなたが選択した場合、後で別の回答を受け入れることができます。 – trashgod