1

私のプロジェクトでは、30日間の棒グラフと1日の正味額を表示する必要があります。棒グラフのアクティビティを表示している間、X軸のラベルは折りたたまれ、すべてが間隔なしで*表示*されます。ズームボタンをクリックすると、ビューが展開され、対応するx軸ラベルが付いたバーが表示されます。活動開始時に拡大表示で棒グラフを表示する必要があります。

棒グラフを表示するためのコーディング:

     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        renderer.setAxisTitleTextSize(16);
        renderer.setChartTitleTextSize(20);
        renderer.setLabelsTextSize(15);
        renderer. setLegendTextSize(15);
//     renderer.setInScroll(true);
        //renderer.setMargins(new int[]{10,10,10,0});
        int length = colors.length;
        for (int j = 0; j < length; j++) {
          SimpleSeriesRenderer r = new SimpleSeriesRenderer();
          r.setColor(colors[j]);
          renderer.addSeriesRenderer(r);
        }
        if(flag==1)
     renderer.setChartTitle("Monthly Basis");
        if(flag==0)
             renderer.setChartTitle("Weekly Basis");
        if(flag==2)
             renderer.setChartTitle("Yearly Basis");
    renderer.setXTitle("Date");
    renderer.setYTitle("NetAmount");

    renderer.setXAxisMin(0);

    //renderer
    renderer.setYAxisMin(100);
   // renderer.setYAxisMax(35000);
    renderer.setAxesColor(Color.GRAY);
    renderer.setLabelsColor(Color.LTGRAY);
          renderer.setXLabels(0);
          //renderer.setYLabels(31);
            renderer.setDisplayChartValues(true);
            renderer.setXLabelsAlign(Align.LEFT);
            renderer.setYLabelsAlign(Align.RIGHT);
          if(flag==0 || flag==1)
          {
             for(int axis=1;axis<=31;axis++)
            {
                String d;
                d=String.valueOf(axis);
                renderer.addTextLabel(axis,d);

            }
          }
          else
          {
              renderer.setXAxisMin(2005);
              for(int axis=2005;axis<=2011;axis++)
                {
                    String d;
                    d=String.valueOf(axis);
                    renderer.addTextLabel(axis,d);

                }

             // renderer.setXLabels(4);
          }
             //renderer.setPanEnabled(false,false);
             //renderer.setZoomEnabled(false,false);
           // renderer.setPanLimits(new double[] { 0, 32, -10, 40 });
          // renderer.setZoomLimits(new double[] { 0, 32, -10, 40 });
            renderer.setZoomRate(3.0f);
            renderer.setBarSpacing(0.25);
            //renderer.set(new  double[] {0,30,100,35000});
            //Intent in;

            List<double[]> xvalues = new ArrayList<double[]>();

            int count=1,j=0;
           if(flag==0 || flag==1)
           {
            double xdata[]=new double[31];
            while(count<32)
            {

            xdata[j]=count;
            count++;
            j++;

            }
            xvalues.add(xdata);
           }
           if(flag==2)
           {
            double xdata[]=new double[7];
            count=2005;
            while(j<7)
            {

            xdata[j]=count;
            count++;
            j++;

            }
            xvalues.add(xdata);
           }


          //  return ChartFactory.getBarChartIntent(context, buildBarDataset(titles,xvalues,values), renderer,
            //    Type.DEFAULT);
            mchart=ChartFactory.getBarChartView(context,buildBarDataset(titles,xvalues,values), renderer, Type.STACKED);
            //LinearLayout layout = (LinearLayout) findViewById(R.id.chart1);
            layout.addView(mchart);
            mchart.repaint();

            //startActivity(in);

  }


     protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> xvalues, List<double[]> values) {
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
     int length = titles.length;
     for (int i = 0; i < length; i++) {
    //CategorySeries series = new CategorySeries(titles[i]);
XYSeries series = new XYSeries(titles[i]);
double[] v = values.get(i);
double[]x=xvalues.get(i);

int seriesLength = v.length;
    for (int k = 0; k < seriesLength; k++) {
if(v[k]==0)
{
v[k]=MathHelper.NULL_VALUE;
}
else
{
     series.add(x[k],v[k]);
}
      //Log.i("Invent","X Axis"+x[k]);
//series.add(xdata[k],v[k]);
     }
     dataset.addSeries(series);
    for (int k = 0; k < seriesLength; k++) {
if(v[k]==MathHelper.NULL_VALUE)
{
v[k]=0;
}
     }
    }
   return dataset;
       }


}
4

2 に答える 2

2

100%確信はありませんが、ここで試してみます。

まず、現在提案されているのがaddXTextLabelの場合、非推奨のメソッドaddTextLabelを使用しているようです。

次に、setXLabels(0);を設定します。XLabelが0を超えるため、これが使用される減価償却方法でどのように機能するかがわかりません。

第三に、addTextLabelのX値は実際には、バーインデックスではなく位置だと思います。

私はaChartEngineの専門家ではないか、今すぐコードをテストする時間がありません。今夜遅くにいくつかのテストを行い、結果を使用してこの回答を編集します。他の答えがあなたを助けないなら。

(編集)

コードをテストした後、次の結果が得られます。

挿入後のラベル

これは、次の3つの方法で解決できる問題です。

  • ラベルの数を減らします。たとえば、他のラベルのみを印刷します。
  • ラベルには小さいフォントサイズを使用します。この場合、読みやすさが大幅に低下すると思うので、これは難しいと思います。
  • 他の軸のラベルを削除するなどして、軸を長くしてみてください。そこにある金額のラベルを表示したいので、ここでは役に立ちません。

ここで最も有用な解決策だと思うので、私はこれまでにないスキップの非常に単純で素朴な実装を作成しました。

for(int axis=1;axis<=31;axis++)
{
  if(axis%2 == 1){
    String d;
    d=String.valueOf(axis);
    renderer.addTextLabel(axis,d);
  }
}

結果は次のようになります。

ここに画像の説明を入力してください

お役に立てれば!

(再度編集)

上記の質問の新しい理解はまだ正しいですが、私が今理解している質問への答えはここにあります。

パンを機能させるには、パンを有効にして(この質問ですでに実行済み)、xAxisMaxをデータセットの長さよりも短い値に設定する必要があります。この例では、たとえば15fに設定するのが最も簡単です。これは次のように行われます。

renderer.setXAxisMax(15.0f);

これがあなたが望んでいたものであることを願っています。

于 2012-06-27T13:15:23.767 に答える
0

非常に紛らわしい質問を正しく理解している場合は、を使用する必要がありますsetBarSpacing()

于 2012-06-27T11:44:38.483 に答える