3

現在、以下のコードは添付の棒グラフを表示します。スケールは小数を含み、2 から始まります。

私の質問は: y 軸ラベルを 0 から開始し、データの最大値まで整数で増加させる方法はありますか? たとえば、これでは、0,1,2,3,4,5?

barData = this.getIntent().getExtras().getString("GraphData");

            GraphViewSeries barGraphSeries = new GraphViewSeries(
                    new GraphViewData[] {
                            new GraphViewData(0, Integer.parseInt(barData
                                    .substring(0, barData.indexOf(",")))),
                            new GraphViewData(1, Integer.parseInt(barData
                                    .substring(barData.indexOf(",") + 1,
                                            barData.length()))) });

            GraphView statGraphView = new BarGraphView(this,
                    "Current Stat Graph");

            statGraphView.getGraphViewStyle().setGridColor(Color.BLACK);
            statGraphView.getGraphViewStyle().setHorizontalLabelsColor(
                    Color.BLACK);
            statGraphView.getGraphViewStyle().setVerticalLabelsColor(
                    Color.BLACK);
            String[] horLabels = { "Correct", "Incorrect" };
            statGraphView.setHorizontalLabels(horLabels);
            statGraphView.getGraphViewStyle().setNumHorizontalLabels(2);
            statGraphView.getGraphViewStyle().setNumVerticalLabels(10);



            statGraphView.addSeries(barGraphSeries);

            LinearLayout layout = (LinearLayout) findViewById(R.id.graph1);
            layout.addView(statGraphView);

現在の棒グラフ

4

1 に答える 1

11

最初に知っておくべきことは、GraphView に Y スケールを管理させると、10 個の間隔、つまり 11 個の値が表示されるということです。したがって、0 から 10、または 0 から 20 の値がある場合、表示される値は整数になります。

GraphView.setManualYAxisBounds(double max, double min) で垂直方向の境界を手動で設定できます。この場合、setManualYAxisBounds(5, 0) を使用したいでしょうが、整数は表示されません。したがって、getGraphViewStyle().setNumVerticalLabels(6) を使用する必要があります。

これは、スケールを 0 から 200 までの値で動的に適応させるために使用するコードの一部であり、最大スケール値はデータの最大値にできるだけ近いものです (理解できるといいのですが、笑)

  int maxValue = ...    // here, you find your max value
  // search the interval between 2 vertical labels
  int interval;
  if (maxValue <= 55) {
      interval = 5; // increment of 5 between each label
  } else if (maxValue <= 110) {
      interval = 10; // increment of 10 between each label
  } else {
      interval = 20; // increment of 20 between each label
  }
  // search the top value of your graph, it must be a multiplier of your interval
  int maxLabel = maxValue;
  while (maxLabel % interval != 0) {
      maxLabel++;
  }
  // set manual bounds
  setManualYAxisBounds(maxLabel, 0);
  // indicate number of vertical labels
  getGraphViewStyle().setNumVerticalLabels(maxLabel / interval + 1);
  // now, it's ok, you should have a graph with integer labels
于 2014-02-02T01:29:28.167 に答える