Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

jFreeChart折れ線グラフの描画について

いつもお世話になっています。

jFreeChartを用いて、以下のような折れ線グラフを作成しています。
 ・プロット点を2Dの円で表示
 ・プロット点間を直線で接続
 ・Y軸の自動範囲設定をOFFにし、上限・下限値を設定

この際、データセットに上限値と同じ値があった場合、
プロット点はグラフ描画範囲の上端にプロットされますが、
描画範囲からはみ出す上半分は描画されず、下半分の円となります。
また、上限値が連続する場合、値間の線は上限の目盛線(枠線)と重なり、
識別できません。

Y軸の自動範囲設定をOFFにしたまま、
プロット点・線を上限目盛(枠線)上に表示する方法を教えてください。

#グラフのイメージはこんな感じです↓

上限+−−−−◎==◎−−−−−−   ◎の上半分が欠ける
  |   /    \        =の線が目盛線で見えない
 Y|  ●      ●
  | /        \
  |●          ●
下限+−−−−−−−−−−−−−−


#ソース(抜粋)

    JFreeChart jfreechart = ChartFactory.createXYLineChart(
            "title",                        // title
            "X Axis Label",                    // X Axis Label
            "Y Axis Label",                    // Y Axis Label
            xyDataset,                         // data set
            PlotOrientation.VERTICAL, 
            false,                             // legend
            false,                             // tool tips
            false);                         // URLs

    // Chart Setting
    jfreechart.setBackgroundPaint(Color.white);
    jfreechart.setPadding(new RectangleInsets(10,0,0,10));
    
    // Plot Area Setting
    XYPlot plot = (XYPlot)jfreechart.getPlot();
    plot.setBackgroundPaint(Color.white);
    plot.setRangeGridlinePaint(Color.lightGray);
    
    // Plot (point, line)
    Shape shape = new Ellipse2D.Double(-4.0, -4.0, 8.0, 8.0);
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer)plot.getRenderer();
    renderer.setBaseShapesVisible(true);
    renderer.setSeriesShape(0, shape);
    renderer.setSeriesPaint(0, Color.red);
    
    // XY Axis Setting
    plot.setAxisOffset(new RectangleInsets(0, 0, 0, 0));

    // Y Axis Setting
    NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();
    yAxis.setAutoRange(false);
    yAxis.setRange(下限値, 上限値);

    TickUnits tickUnitsY = new TickUnits();
    TickUnit unitY = new NumberTickUnit(2);
    tickUnitsY.add(unitY);
    yAxis.setStandardTickUnits(tickUnitsY);

0

回答

9023

閲覧

0件の回答

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。