AChart Enigne Bar Chart - 向右滚动时隐藏系列 [英] AChart Enigne Bar Chart - hide the series when scrolling to right
问题描述
我使用了一个优秀的库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);
}
-
renderer.setMarginsColor()
并使用正确的ACE版本。 - 隐藏它们。
- 隐藏它或让它的方式。
更新:还添加了一个新的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);
}
renderer.setMarginsColor()
and use the right version of ACE.- Hide them.
- 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屋!