我已经使用AchartEngine创建了条形图。我喜欢为两个x网格之间的空间设置不同的颜色,如下图所示。以及如何删除每个轴标签中的“-”符号。(需要删除4hr-中存在的“-”)。如果无法设置颜色,我只想显示4个y标签,其中最高的值在顶部。而且我也想自己修复两个标签之间的空间。我还需要为y标签添加hr或其他文本。下面的代码是我使用的代码,并且在某些设备中值为0的情况下也会显示一条细线。我不希望这样,如果值大于0,则只应显示小节。我得到这样的。我希望图表像问题末尾的一样。
int largest = y[0];
for (int i = 1; i < y.length; i++) {
if (y[i] > largest) {
largest = y[i];
}
}
CategorySeries series = new CategorySeries("");
for (int i = 0; i < y.length; i++) {
series.add("Bar" + (i + 1), y[i]);
}
XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
dataSet.addSeries(series.toXYSeries()); // number of series
// customization of the chart
XYSeriesRenderer renderer = new XYSeriesRenderer(); // one renderer for
// one series
renderer.setColor(Color.RED);
renderer.setDisplayChartValues(false);
renderer.setChartValuesSpacing((float) 5.5d);
renderer.setLineWidth((float) 1.5d);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);
// mRenderer.setChartTitle("Demo Graph");
// mRenderer.setXTitle("xValues");
mRenderer.setYTitle("minutes");
mRenderer.setLabelsColor(getResources().getColor(R.color.txt_blue));
mRenderer.setShowGridX(false); // this will show the grid in graph
mRenderer.setShowGridY(false);
// mRenderer.setAntialiasing(true);
mRenderer.setBarSpacing(.5); // adding spacing between the line or
// stacks
// mRenderer.setApplyBackgroundColor(true);
// mRenderer.setBackgroundColor(Color.BLACK);
mRenderer.setXAxisMin(0);
mRenderer.setYAxisMin(0);
mRenderer.setXAxisMax(7);
mRenderer.setZoomInLimitY(10);
if (largest < 6) {
mRenderer.setYAxisMax(6);
} else {
mRenderer.setYAxisMax(largest);
}
mRenderer.setScale(4);
mRenderer.setXLabels(0);
mRenderer.addXTextLabel(1, "Sun");
mRenderer.addXTextLabel(2, "Mon");
mRenderer.addXTextLabel(3, "Tue");
mRenderer.addXTextLabel(4, "Wed");
mRenderer.addXTextLabel(5, "Thu");
mRenderer.addXTextLabel(6, "Fri");
mRenderer.addXTextLabel(7, "Sat");
// mRenderer.setYLabels(0);
//
// mRenderer.addYTextLabel(2, "2 min");
//
// mRenderer.addYTextLabel(4, "4 min");
//
// mRenderer.addYTextLabel(6, "6 min");
// mRenderer.addYTextLabel(7, "Sat");
mRenderer.setXLabelsColor(getResources().getColor(R.color.txt_blue));
mRenderer.setYLabelsColor(0, getResources().getColor(R.color.txt_blue));
mRenderer.setLabelsColor(getResources().getColor(R.color.txt_blue));
// mRenderer.setYLabelsAlign(Align.RIGHT);
mRenderer.setYLabelsPadding(20);
mRenderer.setPanEnabled(false, false);
mRenderer.setZoomEnabled(false, false);
mRenderer.setPanEnabled(false, false); // will fix the chart position
// Intent intent = ChartFactory.getBarChartIntent(context, dataSet,
// mRenderer,Type.DEFAULT);
mRenderer.setBarSpacing(1);
// mRenderer.setYLabelsPadding(5);
mRenderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
mRenderer.setShowAxes(false);
// mRenderer.setXAxisMin(-0.5);
// 1080 x 1920
if (screen_width == 480 && screen_height == 800) {
mRenderer.setAxisTitleTextSize(15);
mRenderer.setLabelsTextSize(15);
} else if (screen_width > 480 && screen_width < 1000
&& screen_height > 800 && screen_height < 1700) {
mRenderer.setAxisTitleTextSize(20);
mRenderer.setLabelsTextSize(20);
}
else if (screen_width > 1000 && screen_height > 1700) {
mRenderer.setAxisTitleTextSize(30);
mRenderer.setLabelsTextSize(30);
} else if (screen_width < 480 && screen_height < 800) {
mRenderer.setAxisTitleTextSize(10);
mRenderer.setLabelsTextSize(10);
}
mRenderer.setShowLegend(false);
mChart = (GraphicalView) ChartFactory.getBarChartView(getBaseContext(),
dataSet, mRenderer, Type.DEFAULT);
// Adding the Line Chart to the LinearLayout
chartContainer.addView(mChart);
两件事情:
The way I get this kind of backgrounds is to add stacked bar series with one value on the x-axis and as much values on the y-axis as you need. Than render this stacked bar first and let the real bar chart render on top of it. The other way, to set the background color transparent and have a background drawable behind the chart, is difficult. I tried that but I didn't find a way to synchronize the background with the value in the chart (basically I gave up on this and was succesful with the `Background-series").
Eliminate the dash: My idea was, to set the dash to an transparent color. But the color depends in AChartEngine on the color of the labels, not - as one might expect - on the color of the axis. So, without rewriting parts of the Renderer it's not possible in this version (currently 1.1) to eliminate the dash on a value.
编辑:第一点的例子。
这是一些简短的代码,可以为其本身提供背景。
public Intent execute(Context context) {
// The demo source counts series by number of titles here
String[] titles = new String[] { "The Background", "", "" };
// "stacked" values. The highest first. It's printed first.
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 6d, 6d, 6d, 6d, 6d, 6d, 6d });
values.add(new double[] { 4d, 4d, 4d, 4d, 4d, 4d, 4d });
values.add(new double[] { 2d, 2d, 2d, 2d, 2d, 2d, 2d });
// Background colors. Here blue and white to actually differentiate it
int[] colors = new int[] { Color.BLUE, Color.WHITE, Color.BLUE};
// Some settings for the renderer. Change as necessary
XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
setChartSettings(
renderer, "", "", "", 1d, 7d, 0d, 6d,
Color.TRANSPARENT, Color.TRANSPARENT);
renderer.setXLabels(0);
renderer.setYLabels(0);
renderer.setPanEnabled(false, false);
renderer.setZoomEnabled(false);
renderer.setBarSpacing(0d);
renderer.setShowLegend(false);
// done. start activity with given intent
return ChartFactory.getBarChartIntent(
context, buildBarDataset(titles, values), renderer, Type.STACKED);
}
我使用了演示源,以使代码尽可能短。我使用的方法是buildBarRenderer
,buildBarDataset
和setChartSettings
。您可以在AbstractDemoChart
课堂上找到它们。
最小值和最大值硬编码为1-7(适用于工作日)和0-6(适用于y值)。同样,设置只是保留所有装饰。在您的情况下,请按照示例中的说明进行设置。
由于aChartEngine并没有堆叠条形图的真正概念-它只是将条形图绘制在彼此的后面,因此可以在其他条形图的上方看到具有最高值的条形图-您只需要现在将值添加到新值列表的末尾系列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句