使用AndroidPlot改变条形宽度

时间:2015-07-31 18:06:34

标签: android androidplot

使用android绘图库并且正在努力如何将绘图上的条形图调整到相同的大小。由于某种原因,该系列中的第一个看起来比其余的更宽。例如,见图片。

Incorrect Bar Widths

如您所见,域标签位置正确并读取正确的值。以下是自定义XYPlot

格式的代码
    BarFormatter series1Format = new BarFormatter();
    plot.addSeries(series, series1Format);

    BarRenderer renderer = (BarRenderer) plot.getRenderer( BarRenderer.class );
    renderer.setBarRenderStyle(BarRenderer.BarRenderStyle.SIDE_BY_SIDE);
    renderer.setBarWidthStyle(BarRenderer.BarWidthStyle.VARIABLE_WIDTH);
    renderer.setBarGap(2.0f);

    Paint series1Fill = new Paint();
    series1Fill.setColor(plot.getContext().getResources().getColor(R.color.accent));
    series1Format.setFillPaint(series1Fill);

    plot.setTicksPerRangeLabel(2);
    plot.getGraphWidget().setDomainGridLinePaint(null);

    plot.setDomainStep(XYStepMode.INCREMENT_BY_VAL, 1);
    plot.setRangeLowerBoundary(0,BoundaryMode.FIXED);
    plot.setUserDomainOrigin(1);
    plot.setDomainLowerBoundary(0.5, BoundaryMode.FIXED);
    plot.setDomainUpperBoundary(series.size() + 0.5, BoundaryMode.FIXED);

    plot.setBorderStyle(XYPlot.BorderStyle.NONE, null, null);

    plot.setDomainValueFormat(new DecimalFormat("0"));
    plot.setRangeValueFormat(new DecimalFormat("0"));

显然,对于像上面这个例子这样的小数据系列,这一点更为明显。感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

至少部分问题是由于您使用了 VARIABLE_WIDTH 。在此模式下,Androidplot计算每个条的宽度,均匀地细分绘图图形空间。如果您在边缘有数据(就像上面的条#3那样),它会被截止,因为计算出的条形宽度会越过边界。

我建议将一些边框颜料应用到您的酒吧格式化,以便在您的酒吧被截止时更容易看到。要解决此问题,您至少有3个选项:

使用FIXED_WIDTH栏。应该是自我解释的。

设置固定域边界并在比例尺的两端显示额外值:

plot.setDomainBoundaries(-1, 3, BoundaryMode.FIXED);

添加网格填充以允许绘制边    充分。在Androidplot的最新版本中,您可以执行类似的操作    这样:

plot.getGraphWidget().getGridBox().setPaddingLeft(PixelUtils.dpToPix(70)); 
plot.getGraphWidget().getGridBox().setPaddingRight(PixelUtils.dpToPix(70));

你可能不得不玩它来获得正确的设置。还要记住,随着屏幕越来越宽,条形图也越来越宽;在纵向模式下看起来不错的东西在风景中可能看起来很糟糕。

另一方面,我很难过,为什么在第一个栏上方的图形实际上看起来比中间栏宽。虽然没有看到更多的代码,但我无法说出造成这种情况的原因。