AChart Enigne Bar Chart - 向右滚动时隐藏系列 [英] AChart Enigne Bar Chart - hide the series when scrolling to right

查看:310
本文介绍了AChart Enigne Bar Chart - 向右滚动时隐藏系列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用了一个优秀的库AChart引擎来生成条形图。所有功能都可以正常工作,但我有几件事我不能解决:



这是我的屏幕截图:



现在有两件事需要修正:



1)滚动到右边时隐藏系列,目前系列March即使在0,0之后也是可见的。



2)网格线位于图表的顶部,但它应在图形的后面。



3)如何在右上角显示图例

 私人空间openChart(){
int [] x = {10,20,30,40,50,60,70,80};
// int [] y = {10,20,30,40,50,60,70};
int [] income = {20,25,27,30,28,35,37,38};
int [] expense = {22,27,29,28,26,30,33,34};
int [] sample = {22,27,29,28,26,30,33,34};

//为收入创建XYseries
XYSeries incomeSeries = new XYSeries(Income);
//为费用创建XYSeries
XYSeries expenseSeries = new XYSeries(Expense);
//为费用创建XYSeries
XYSeries sampleseries = new XYSeries(Sample);
//将数据添加到收入和支出系列
for(int i = 0; i incomeSeries.add(i,income [i]);
expenseSeries.add(i,expense [i]);
sampleseries.add(i,sample [i]);
}

//创建用于保存每个系列的数据集
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
//将Income系列添加到数据集
dataset.addSeries(revenuesSeries);
//将费用系列添加到数据集
dataset.addSeries(expenseSeries);
//将费用系列添加到数据集
dataset.addSeries(sampleseries);

//创建XYSeriesRenderer以自定义incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(130,130,230));
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setChartValuesTextAlign(Align.CENTER);
incomeRenderer.setChartValuesTextSize(18);
incomeRenderer.setDisplayChartValues(true);

//创建XYSeriesRenderer以自定义expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.rgb(220,80,80));
expenseRenderer.setFillPoints(true);
expensesRenderer.setLineWidth(2);
expenseRenderer.setChartValuesTextAlign(Align.CENTER);
expenseRenderer.setChartValuesTextSize(18);
expenseRenderer.setDisplayChartValues(true);

//创建XYSeriesRenderer以自定义expenseSeries
XYSeriesRenderer samplseries = new XYSeriesRenderer();
samplseries.setColor(Color.rgb(120,40,40));
samplseries.setFillPoints(true);
samplseries.setLineWidth(2);
samplseries.setChartValuesTextAlign(Align.CENTER);
samplseries.setChartValuesTextSize(18);
samplseries.setDisplayChartValues(true);


//创建XYMultipleSeriesRenderer以自定义整个图表
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setMargins(new int [] {30,50,60,0});
multiRenderer.setXRoundedLabels(true);
multiRenderer.setLegendTextSize(24);
multiRenderer.setZoomRate(0.2f);
multiRenderer.setZoomEnabled(false,false);
multiRenderer.setBarSpacing(0.3f);
multiRenderer.setXAxisMin(-1);
multiRenderer.setXAxisMax(5);
multiRenderer.setYAxisMin(0);
multiRenderer.setYAxisMax(50);
multiRenderer.setAxisTitleTextSize(20);
multiRenderer.setAxesColor(Color.BLACK);
multiRenderer.setGridColor(Color.GRAY);
multiRenderer.setShowGridX(true);
multiRenderer.setXLabels(0);

multiRenderer.setPanLimits(new double [] {-1,x.length,0,x.length});

multiRenderer.setLabelsColor(Color.BLACK);
multiRenderer.setLabelsTextSize(20);

multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setXTitle(Tests);
multiRenderer.setYLabelsAlign(Align.RIGHT);
multiRenderer.setYLabelsColor(0,Color.BLACK);
multiRenderer.setYTitle(Scores);

for(int i = 0; i multiRenderer.addXTextLabel(i,mMonth [i]);
}

//向multipleRenderer添加incomeRenderer和expenseRenderer
//注意:将数据集添加到数据集的顺序和渲染器到multipleRenderer
//的顺序应该是相同的b $ b multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
multiRenderer.addSeriesRenderer(samplseries);

//创建一个意图,使用dataset和multipleRenderer绘制条形图
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(),dataset,multiRenderer,Type.DEFAULT);

//开始活动
startActivity(intent);

}


解决方案


  1. renderer.setMarginsColor()并使用正确的ACE版本。

  2. 隐藏它们。

  3. 隐藏它或让它的方式。

更新:还添加了一个新的API调用,将允许您避免在图表上部分显示的值显示。

 渲染器.setDisplayBoundingPoints(false); 

您可以下载包含此功能的版本此处


I am using an excellent library AChart engine for generating bar chart. All features are working fine, but I have couple of things which I am not able to resolve :

this is my screen shot:

Now there are two things that needs to be fixed :

1) Hide the series when it is scrolled to right, currently the series March is visible even after 0,0 also.

2) Gridlines are on top of the graph but it should be behind the graph.

3) How to display the legends on top right corner instead of bottom.

here is my below code:

private void openChart(){
        int[] x = { 10,20,30,40,50,60,70,80 };
       // int[] y = { 10,20,30,40,50,60,70 };
        int[] income = { 20,25,27,30,28,35,37,38};
        int[] expense = {22, 27, 29, 28, 26, 30, 33, 34 };
        int[] sample = {22, 27, 29, 28, 26, 30, 33, 34};

        // Creating an  XYSeries for Income
        XYSeries incomeSeries = new XYSeries("Income");
        // Creating an  XYSeries for Expense
        XYSeries expenseSeries = new XYSeries("Expense");
     // Creating an  XYSeries for Expense
        XYSeries sampleseries = new XYSeries("Sample");
        // Adding data to Income and Expense Series
        for(int i=0;i<x.length;i++){
            incomeSeries.add(i,income[i]);
            expenseSeries.add(i,expense[i]);
            sampleseries.add(i,sample[i]);
        }

        // Creating a dataset to hold each series
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        // Adding Income Series to the dataset
        dataset.addSeries(incomeSeries);
        // Adding Expense Series to dataset
        dataset.addSeries(expenseSeries);
        // Adding Expense Series to dataset
        dataset.addSeries(sampleseries);

        // Creating XYSeriesRenderer to customize incomeSeries
        XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
        incomeRenderer.setColor(Color.rgb(130, 130, 230));
        incomeRenderer.setFillPoints(true);
        incomeRenderer.setLineWidth(2);
        incomeRenderer.setChartValuesTextAlign(Align.CENTER);
        incomeRenderer.setChartValuesTextSize(18);
        incomeRenderer.setDisplayChartValues(true);

        // Creating XYSeriesRenderer to customize expenseSeries
        XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
        expenseRenderer.setColor(Color.rgb(220, 80, 80));
        expenseRenderer.setFillPoints(true);
        expenseRenderer.setLineWidth(2);
        expenseRenderer.setChartValuesTextAlign(Align.CENTER);
        expenseRenderer.setChartValuesTextSize(18);
        expenseRenderer.setDisplayChartValues(true);

     // Creating XYSeriesRenderer to customize expenseSeries
        XYSeriesRenderer samplseries = new XYSeriesRenderer();
        samplseries.setColor(Color.rgb(120, 40, 40));
        samplseries.setFillPoints(true);
        samplseries.setLineWidth(2);
        samplseries.setChartValuesTextAlign(Align.CENTER);
        samplseries.setChartValuesTextSize(18);
        samplseries.setDisplayChartValues(true);


        // Creating a XYMultipleSeriesRenderer to customize the whole chart
        XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
        multiRenderer.setMargins(new int[]{30,50,60,0});
        multiRenderer.setXRoundedLabels(true);
        multiRenderer.setLegendTextSize(24);
        multiRenderer.setZoomRate(0.2f); 
        multiRenderer.setZoomEnabled(false, false); 
        multiRenderer.setBarSpacing(0.3f); 
        multiRenderer.setXAxisMin(-1); 
        multiRenderer.setXAxisMax(5);
        multiRenderer.setYAxisMin(0);
        multiRenderer.setYAxisMax(50);
        multiRenderer.setAxisTitleTextSize(20); 
        multiRenderer.setAxesColor(Color.BLACK); 
        multiRenderer.setGridColor(Color.GRAY); 
        multiRenderer.setShowGridX(true); 
        multiRenderer.setXLabels(0);

        multiRenderer.setPanLimits(new double[] { -1, x.length, 0, x.length});

        multiRenderer.setLabelsColor(Color.BLACK); 
        multiRenderer.setLabelsTextSize(20);  

        multiRenderer.setXLabelsColor(Color.BLACK); 
        multiRenderer.setXTitle("Tests"); 
        multiRenderer.setYLabelsAlign(Align.RIGHT);
        multiRenderer.setYLabelsColor(0, Color.BLACK);
        multiRenderer.setYTitle("Scores");

        for(int i=0; i< x.length;i++){
            multiRenderer.addXTextLabel(i, mMonth[i]);
        }

        // Adding incomeRenderer and expenseRenderer to multipleRenderer
        // Note: The order of adding dataseries to dataset and renderers to multipleRenderer
        // should be same
        multiRenderer.addSeriesRenderer(incomeRenderer);
        multiRenderer.addSeriesRenderer(expenseRenderer);
        multiRenderer.addSeriesRenderer(samplseries);

        // Creating an intent to plot bar chart using dataset and multipleRenderer
        Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT);

        // Start Activity
        startActivity(intent);

    }

解决方案

  1. renderer.setMarginsColor() and use the right version of ACE.
  2. Hide them.
  3. Hide it or let it the way it is.

Update: I have also added a new API call that will allow you to avoid the values that are partially displayed on the chart to be displayed.

renderer.setDisplayBoundingPoints(false);

You can download a version including this feature here.

这篇关于AChart Enigne Bar Chart - 向右滚动时隐藏系列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆