首页 文章

使用AchartEngine的条形图

提问于
浏览
3

我使用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;  
}}

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

我需要这样的条形图,

Bargraph

我怎样才能实现这一目标?请帮我 .

4 回答

  • 4

    如果你想设置条的宽度 -

    试试这个...

    renderer.setBarSpacing(-0.7);
    
  • 0

    我发现解决问题的唯一方法是非常难看,但在他们改进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 更改为"Outstanding Jobs"会更好看

  • 0

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

    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设置为透明颜色并在renderer1之后粘贴它们,另一个在renderer2之后粘贴它们

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

    并看到你得到你想要的魔法

  • 2

    我得到了答案.... :)我使用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);
    

相关问题