我已经开发了使用图表引擎条形图,我已经使用了多系列表示定制的基础上的数据上完成不同的彩色条。
不过,当有一栏为空值,XYmultiseriesrenderer仍然呈现图表,并创建了条之间不需要的空间。
私人无效openChart(){
// INT []×= {0,1,2,3,4,5,6,7,8,9};
INT []所得税= {230,220,230,250,270,300,280,350,370,400};
INT []费用= {220,270,290,280,260,300,330,340};
INT []颜色= {Color.GREEN,Color.YELLOW,Color.RED,Color.BLUE};
XYSeries [] incomeSeries = addIncomeSeriestoDataSet(收入);
XYSeries expenseSeries = constructExpenseSeries(费用自理);
//创建一个数据集来保存每个系列
XYMultipleSeriesDataset数据集=新XYMultipleSeriesDataset();
//增加收入系列的数据集
的for(int i = 0; I< incomeSeries.length;我++){
dataset.addSeries(incomeSeries [I]);
}
//添加费用系列的数据集
dataset.addSeries(expenseSeries);
//创建一个XYMultipleSeriesRenderer自定义整个图表
XYMultipleSeriesRenderer multiRenderer = buildRenderer(颜色);
//创建一个意图情节线图使用的数据集和multipleRenderer
意向意图= ChartFactory.getBarChartIntent(getBaseContext(),数据集,multiRenderer,
Type.DEFAULT);
//开始活动
startActivity(意向);
}私人XYSeries [] addIncomeSeriestoDataSet(INT []收入){
XYSeries [] incomeSeries = {新XYSeries(收入及LT; = 250),新XYSeries(收入及LT; 320),新
XYSeries(收入> 320)};
//将数据添加到收入系列
INT I = 0;
INT SIZEX = mMonth.length;
INT incomeItemsCount = income.length;
而(I< SIZEX和放大器;&安培; I< incomeItemsCount){
如果(收入[1] - = 250){
incomeSeries [0]。新增(ⅰ,收入[I]);
}否则如果(收入[1] - = 320){
incomeSeries [1]。新增(ⅰ,收入[I]);
} 其他 {
incomeSeries [2]。新增(ⅰ,收入[I]);
}
我++;
}
返回incomeSeries;
}
私人XYSeries constructExpenseSeries(INT []费用){
XYSeries expenseSeries =新XYSeries(费用);
INT I = 0;
INT SIZEX = mMonth.length;
INT expenseItemsCount = expense.length;
而(I< SIZEX和放大器;&安培; I< expenseItemsCount){
expenseSeries.add(我,费[I]);
我++;
}
返回expenseSeries;
}
私人XYMultipleSeriesRenderer buildRenderer(INT []颜色){
XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setXLabels(0);
renderer.setAxesColor(Color.BLUE);
renderer.setXLabelsColor(Color.BLUE);
renderer.setYLabelsColor(0,Color.BLUE);
renderer.setXLabelsAlign(Align.CENTER);
renderer.setChartTitle(收入与费用表);
renderer.setXTitle(2012年);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setLabelsColor(Color.BLUE);
renderer.setYTitle(中的美元金额);
renderer.setBarSpacing(1.0);
renderer.setMarginsColor(Color.WHITE);
renderer.setApplyBackgroundColor(真正的);
renderer.setBackgroundColor(Color.WHITE);
renderer.setMargins(新INT [] {20,30,15,0});
renderer.setZoomButtonsVisible(真正的);
的for(int i = 0; I< mMonth.length;我++){
renderer.addXTextLabel(ⅰ,mMonth [I]);
}
INT长度= colors.length;
的for(int i = 0; I<长度;我++){
XYSeriesRenderer R =新XYSeriesRenderer();
r.setColor(颜色[I]);
r.setLineWidth(4);
r.setFillPoints(真正的);
r.setDisplayChartValues(真正的);
renderer.addSeriesRenderer(r)的;
}
返回渲染器;
解决方案
您的code进行 setBarSpacing(1.0)
通话。只是删除。
I have developed a bar chart using a chart engine, and I have used multiple series showing different colored bars on the basis of customisation done on the data.
But when there is null value for one bar , XYmultiseriesrenderer still renders the chart and creates undesired spaces between the bars.
private void openChart(){
//int[] x = { 0,1,2,3,4,5,6,7,8,9};
int[] income = { 230,220,230,250,270,300,280,350,370,400};
int[] expense = {220, 270, 290, 280, 260, 300, 330, 340};
int[] colors = {Color.GREEN,Color.YELLOW , Color.RED , Color.BLUE};
XYSeries[] incomeSeries = addIncomeSeriestoDataSet(income);
XYSeries expenseSeries = constructExpenseSeries(expense);
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
for(int i= 0 ; i< incomeSeries.length ; i++) {
dataset.addSeries(incomeSeries[i]);
}
//Adding Expense Series to the dataset
dataset.addSeries(expenseSeries);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = buildRenderer(colors);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer,
Type.DEFAULT);
// Start Activity
startActivity(intent);
}private XYSeries[] addIncomeSeriestoDataSet(int[] income){
XYSeries[] incomeSeries = {new XYSeries("Income<=250") , new XYSeries("Income<320") , new
XYSeries("Income>320")};
// Adding data to Income series
int i = 0;
int sizeX = mMonth.length;
int incomeItemsCount = income.length;
while(i<sizeX && i<incomeItemsCount){
if(income[i] <= 250) {
incomeSeries[0].add(i, income[i]);
} else if(income[i] <= 320) {
incomeSeries[1].add(i, income[i]);
} else {
incomeSeries[2].add(i, income[i]);
}
i++;
}
return incomeSeries;
}
private XYSeries constructExpenseSeries(int[] expense) {
XYSeries expenseSeries = new XYSeries("Expense");
int i=0;
int sizeX = mMonth.length;
int expenseItemsCount = expense.length;
while(i<sizeX && i< expenseItemsCount) {
expenseSeries.add(i,expense[i]);
i++;
}
return expenseSeries;
}
private XYMultipleSeriesRenderer buildRenderer(int[] colors) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer.setLegendTextSize(15);
renderer.setXLabels(0);
renderer.setAxesColor(Color.BLUE);
renderer.setXLabelsColor(Color.BLUE);
renderer.setYLabelsColor(0,Color.BLUE);
renderer.setXLabelsAlign(Align.CENTER);
renderer.setChartTitle("Income vs Expense Chart");
renderer.setXTitle("Year 2012");
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setLabelsColor(Color.BLUE);
renderer.setYTitle("Amount in Dollars");
renderer.setBarSpacing(1.0);
renderer.setMarginsColor(Color.WHITE);
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.WHITE);
renderer.setMargins(new int[] { 20, 30, 15, 0 });
renderer.setZoomButtonsVisible(true);
for(int i=0; i< mMonth.length ;i++){
renderer.addXTextLabel(i, mMonth[i]);
}
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setLineWidth(4);
r.setFillPoints(true);
r.setDisplayChartValues(true);
renderer.addSeriesRenderer(r);
}
return renderer;
解决方案
You have a setBarSpacing(1.0)
call in your code. Just remove that.
上一篇:尝试在 InstalledLocation StorageFolder 中创建文件异步时访问被拒绝?被拒、文件、InstalledLocation、StorageFolder
下一篇:Android的追加2的MP4字节数组相加后输出1 MP4文件(其中最后一个视频是第一视频和第二视频)视频、数组、字节、文件