我正在使用 achartengine 1.0.1 (最新)并希望演示一个条形图 .
这就是我要的:
My Desired Graph
What I achieved so far
1:1查看:
缩小视图:
Problems:
-
图表的左右部分在1:1视图中丢失 .
-
Bar之间的距离太高了 . 我需要减少它 .
-
条形图不在文本标签上方 .
-
文本标签颜色为白色 . 我试过
setLabelColor()
但没有工作 . -
上面的文字大小很小 .
-
XAxis文本"AC","WA"等与1,2,3重叠 . 我想删除1,2,3,仅显示"AC","WA"等 .
你知道如何解决这些问题吗?我需要一个与我想要的图形大致相似的图形 . 提前致谢 .
Edit:
这是我尝试的代码:
public GraphicalView getView(Context context)
{
// Bar 1
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
XYSeries ac = new XYSeries("AC");
XYSeries pe = new XYSeries("PE");
XYSeries wa = new XYSeries("WA");
XYSeries tl = new XYSeries("TL");
XYSeries ml = new XYSeries("ML");
XYSeries ce = new XYSeries("CE");
XYSeries re = new XYSeries("RE");
XYSeries ot = new XYSeries("OT");
ac.add(1, 291);
pe.add(2, 11);
wa.add(3, 204);
tl.add(4, 28);
ml.add(5, 0);
ce.add(6, 21);
re.add(7, 51);
ot.add(8, 4);
dataset.addSeries(ac);
dataset.addSeries(pe);
dataset.addSeries(wa);
dataset.addSeries(tl);
dataset.addSeries(ml);
dataset.addSeries(ce);
dataset.addSeries(re);
dataset.addSeries(ot);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.setChartTitle("Submission Statistics");
mRenderer.setXTitle("Verdict Code");
mRenderer.setYTitle("No. of Submissions");
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setZoomEnabled(true);
mRenderer.setZoomButtonsVisible(true);
mRenderer.setBarSpacing(-0.5);
// mRenderer.setMargins(new int[] {20, 30, 15, 0});
mRenderer.setAxisTitleTextSize(16);
mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
mRenderer.addXTextLabel(1, "AC");
mRenderer.addXTextLabel(2, "PE");
mRenderer.addXTextLabel(3, "WA");
mRenderer.addXTextLabel(4, "TL");
mRenderer.addXTextLabel(5, "ML");
mRenderer.addXTextLabel(6, "CE");
mRenderer.addXTextLabel(7, "RE");
mRenderer.addXTextLabel(8, "OT");
mRenderer.setBarWidth(50);
// mRenderer.setXAxisMax(9);
mRenderer.setXAxisMin(0);
mRenderer.setYAxisMin(0);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.parseColor("#00AA00"));
renderer.setDisplayChartValues(true);
XYSeriesRenderer renderer2 = new XYSeriesRenderer();
renderer2.setColor(Color.parseColor("#666600"));
renderer2.setDisplayChartValues(true);
XYSeriesRenderer renderer3 = new XYSeriesRenderer();
renderer3.setColor(Color.parseColor("#FF0000"));
renderer3.setDisplayChartValues(true);
XYSeriesRenderer renderer4 = new XYSeriesRenderer();
renderer4.setColor(Color.parseColor("#0000FF"));
renderer4.setDisplayChartValues(true);
XYSeriesRenderer renderer5 = new XYSeriesRenderer();
renderer5.setColor(Color.parseColor("#6767D0"));
renderer5.setDisplayChartValues(true);
XYSeriesRenderer renderer6 = new XYSeriesRenderer();
renderer6.setColor(Color.parseColor("#AAAA00"));
renderer6.setDisplayChartValues(true);
XYSeriesRenderer renderer7 = new XYSeriesRenderer();
renderer7.setColor(Color.parseColor("#00AAAA"));
renderer7.setDisplayChartValues(true);
XYSeriesRenderer renderer8 = new XYSeriesRenderer();
renderer8.setColor(Color.parseColor("#000000"));
renderer8.setDisplayChartValues(true);
mRenderer.addSeriesRenderer(renderer);
mRenderer.addSeriesRenderer(renderer2);
mRenderer.addSeriesRenderer(renderer3);
mRenderer.addSeriesRenderer(renderer4);
mRenderer.addSeriesRenderer(renderer5);
mRenderer.addSeriesRenderer(renderer6);
mRenderer.addSeriesRenderer(renderer7);
mRenderer.addSeriesRenderer(renderer8);
return ChartFactory.getBarChartView(context, dataset,mRenderer, Type.DEFAULT);
}
Edit (After applying Dan's suggestion)
我的新代码:
.........
mRenderer.setChartTitle("Submission Statistics");
mRenderer.setXTitle("Verdict Code");
mRenderer.setYTitle("No. of Submissions");
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setZoomEnabled(true);
mRenderer.setBarSpacing(-0.5);
mRenderer.setMargins(new int[] {20, 30, 15, 0});
mRenderer.setShowLegend(false);
mRenderer.setAxisTitleTextSize(16);
mRenderer.setChartTitleTextSize(20);
mRenderer.setLabelsTextSize(15);
mRenderer.setLegendTextSize(15);
mRenderer.addXTextLabel(1, "AC");
mRenderer.addXTextLabel(2, "PE");
mRenderer.addXTextLabel(3, "WA");
mRenderer.addXTextLabel(4, "TL");
mRenderer.addXTextLabel(5, "ML");
mRenderer.addXTextLabel(6, "CE");
mRenderer.addXTextLabel(7, "RE");
mRenderer.addXTextLabel(8, "OT");
mRenderer.setBarWidth(50);
mRenderer.setXAxisMin(-2);
mRenderer.setXAxisMax(11);
mRenderer.setYAxisMin(0);
mRenderer.setYLabelsAlign(Align.RIGHT);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
mRenderer.setXLabels(0);
mRenderer.setChartValuesTextSize(16);
.........
现在的问题是:
-
mRenderer.setChartValuesTextSize(size);
无法使用,因为已弃用 -
Bar文本至今仍然很小
-
最高的酒吧在顶部分开
-
X轴标签未与条形图正确对齐
4 回答
遵循您的编号方案:
您可以通过设置可见区域的X轴最小值和最大值来解决此问题:
mRenderer.setXAxisMin(min);
和mRenderer.setXAxisMax(max);
您可以通过增加宽度或使用上述方法来减少它,例如左右两侧有更多空间 .
这是一个未解决的问题 .
试试
mRenderer.setXLabelsColor(color);
renderer.setChartValuesTextSize(size);
mRenderer.setXLabels(0);
编辑:
使用
renderer.setChartValuesTextSize(size);
与#1相同 .
mRenderer.setYAxisMax(300);
已知问题:http://code.google.com/p/achartengine/issues/detail?id=312
我发现尺寸密度计算不正确 .
如果你想:
你需要设置:
我遇到了同样的问题 . 这是因为AChartegine正在尝试为每个渲染器分配足够的空间,以便进行转换 . 这应该由Type.STACKED简单解决
更改
ChartFactory.getBarChartView(context, dataset,mRenderer, Type.DEFAULT);
至
ChartFactory.getBarChartView(context, dataset,mRenderer, Type.STACKED);
希望这可以帮助!