【问题标题】:Bar graph using AchartEngine使用 AchartEngine 的条形图
【发布时间】:2012-05-30 03:02:59
【问题描述】:

我已经使用 aChartEngine 库创建了条形图。谁能帮助我如何增加条形的宽度并将条形定位在 X 轴的中心?

这是我的 BarGraph 类:

public class BarGraph {
public Intent getIntent(Context context){
     XYMultipleSeriesRenderer mrenderer = new XYMultipleSeriesRenderer();
     double[] range = {0,5,0,5};

        int[] y = {24,30,12};
        CategorySeries series1 = new CategorySeries("Today");
        CategorySeries series2 = new CategorySeries("Next day");
        CategorySeries series3 = new CategorySeries("2 days later");

        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

     for (int i=0;i<3;i++){
         switch(i){
         case 0:
                series1.add(y[0]);
                dataset.addSeries(series1.toXYSeries());
                break;
         case 1:
                series2.add(y[1]);
                dataset.addSeries(series2.toXYSeries());
                break;
         case 2:
                series3.add(y[2]);
                dataset.addSeries(series3.toXYSeries());
                break;
         }
     }

    XYSeriesRenderer renderer1 = new XYSeriesRenderer();
    renderer1.setColor(Color.GREEN);
    XYSeriesRenderer renderer2 = new XYSeriesRenderer();
    renderer2.setColor(Color.BLUE);
    XYSeriesRenderer renderer3 = new XYSeriesRenderer();
    renderer3.setColor(Color.RED);
        mrenderer.setAxisTitleTextSize(16);
        mrenderer.setChartTitleTextSize(20);
        mrenderer.setLabelsTextSize(15);
        mrenderer.setLegendTextSize(15);
        mrenderer.setBarSpacing(0);
        mrenderer.setXLabels(1);
        mrenderer.addXTextLabel(2.5, "Outstanding jobs");
        mrenderer.setMargins(new int[] {20, 30, 15, 0});
        mrenderer.setAxesColor(Color.WHITE);
        mrenderer.setChartTitle("Work per day");
        mrenderer.setXTitle("Days");
        mrenderer.setInitialRange(range, 1);
        mrenderer.setBarSpacing(1);
        mrenderer.setXAxisMin(0);
        mrenderer.setXAxisMax(5);
        mrenderer.setYAxisMin(0);
        mrenderer.setPanEnabled(false, false);
        mrenderer.setZoomEnabled(false, false);
        mrenderer.addSeriesRenderer(renderer1);
        mrenderer.addSeriesRenderer(renderer2);
        mrenderer.addSeriesRenderer(renderer3);
    Intent intent = ChartFactory.getBarChartIntent(context, dataset, mrenderer, Type.DEFAULT);
    return intent;  
}}

这是我得到的条形图的截图,

我需要这样的条形图,

我怎样才能做到这一点?请帮帮我。

【问题讨论】:

  • 请重新考虑你在这里使用的循环切换序列反模式,它可能会烧毁任何试图帮助你的人的眼睛......wiki article

标签: android bar-chart achartengine


【解决方案1】:

如果你想设置条的宽度--

试试这个……

    renderer.setBarSpacing(-0.7);

【讨论】:

    【解决方案2】:

    我发现解决您的问题的唯一方法是一种非常丑陋的方法,但在他们改进 achartengine 中的颜色管理之前,它可能会尽可能好。

    首先按照larlins的建议删除for-case。

    然后将空点添加到其他系列对应的其他系列中的填充点:

        series1.add(1,y[0]);
        series1.add(2,0);
        series1.add(3,0);
        dataset.addSeries(series1);
        series2.add(1,0);
        series2.add(2,y[1]);
        series2.add(3,0);
        dataset.addSeries(series2);
        series3.add(1,0);
        series3.add(2,0);
        series3.add(3,y[2]);
        dataset.addSeries(series3);
    

    还将BarSpacing 设置为0,将Type 设置为Type.STACKED 而不是Type.DEFAULT。 我认为如果您删除 Label 并将 XTitle 更改为“杰出工作”会更好

    【讨论】:

      【解决方案3】:

      删除我认为不必要的 for 循环和 switch 案例。并添加两个空白类别系列,如

       CategorySeries series(nameit) = new CategorySeries("");
       CategorySeries series(nameit) = new CategorySeries("");
      

      一个放在 CategoriesSeries series1 之后,另一个放在 CategoriesSeries series2 之后。 然后在 series1 和 series2 之后的两个位置添加零值,如

        series(name it).add(0);
          dataset.addSeries(series(name it).toXYSeries());
      

      渲染器也是如此:将两个 XYSeriesRenderer 设置为透明颜色,然后将它们粘贴到渲染器 1 之后,另一个粘贴到渲染器 2 之后,就像这样

      XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
          renderer1.setColor(Color.TRANSPARENT);
      XYSeriesRenderer renderer(nameit) = new XYSeriesRenderer();
          renderer1.setColor(Color.TRANSPARENT);
      

      看看你得到了你想要的魔法。干杯

      【讨论】:

        【解决方案4】:

        我得到了答案.... :) 我使用了 setBarspacing,但将值设置为 0 或 0.5... 图表可以移动,所以值很容易看到...... :)

        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();         
                multiRenderer.setXLabels(0);  
                multiRenderer.setLabelsTextSize(15);
                multiRenderer.setBarSpacing(0.5);
                multiRenderer.setChartTitle("Commercial Complex APK"); 
                multiRenderer.setXTitle("Projects"); 
                multiRenderer.setYTitle("Variance");         
                multiRenderer.setZoomButtonsVisible(true);
        

        【讨论】:

          猜你喜欢
          • 2011-07-21
          • 2013-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多