0

I'm trying to set the width of the bars of a BarSeries with Shinobi. Code's following:

DataAdapter<String, Double> da1 = new SimpleDataAdapter<String, Double>();
        da1.add(new DataPoint<String, Double>("q1", 1.0));
        da1.add(new DataPoint<String, Double>("q2", 3.0));
        da1.add(new DataPoint<String, Double>("q3", 4.5));
        da1.add(new DataPoint<String, Double>("q4", -2.5));
        BarSeries series1 = new BarSeries();
        series1.setDataAdapter(da1);
        BarSeriesStyle css1 = series1.getStyle();
        css1.setLineWidth(180.0f);
        css1.setAreaColor(Color.YELLOW);

        CategoryAxis xAxis = new CategoryAxis();
        chart.setXAxis(xAxis);
        xAxis.getStyle().setInterSeriesPadding(0.2f);
        NumberAxis yAxis = new NumberAxis();
        chart.setYAxis(yAxis);
        yAxis.getStyle().setInterSeriesPadding(0.2f);

        chart.addSeries(series1);

What happens is that the line css1.setLineWidth(180.0f); is completely ignored. I can put 1.0f or 1000.0f and the lines are always the same width no matter what.

What am I missing, or doing wrong? I'm using shinobi 1.5.1.


Edit: same goes with ColumnSeries:

ColumnSeries cs = new ColumnSeries();
    DataAdapter<Float, Integer> adapterAxis = new SimpleDataAdapter<Float, Integer>();
    adapterAxis.add(new DataPoint<Float, Integer>(0f, 3));
    cs.getStyle().setLineColor(Color.BLACK);
    cs.getStyle().setLineWidth(1f);
    cs.setDataAdapter(adapterAxis);

1f or 20f, nothing changes. chart.addSeries(cs);


Edit: following Kai's answer.

I tried playing around with setInterSeriesPadding, but it doesn't do what I need in that if I approach 1.f as padding value the bar will shrink, but if I set 0f the bar will have a minimum height and the space between them will remain 'big'.

To be clearer: I have 4 bars at 0 to 4 on the Y axis with different X values. Each one is centered more or less on the Y value (not really, but not important right now). E.g. bar centered in 2 will go from ~1.8 to ~2.2 and bar centered in 3 will go from ~2.8 to to ~3.2. I want them thicker, so that they go from ~1.55 to ~2.45 and from ~2.55 to ~3.45. How do I do that?


Edit 2 (images):

Actual:

actual result

Desired (sorry for my lack of Paint skills, it was just a way to show that I want them thicker): desired result

4

1 回答 1

0

当您提到条形系列的宽度时,我假设您指的是高度,即从条形的顶部到底部的测量值。我想提一下,setLineWidth() 方法并非用于此目的,但实际上此方法用于设置围绕条(或列)边缘绘制的线条的样式,以充当边框。随着传递给此方法的值增加,条(或列)保持相同大小,但线向内增长。随后,较大的数字将呈现出没有线条的外观,因为条形或柱形的线条如此粗大,以至于填满了整个条形(或柱形)。

如果您希望操纵条形的高度(或列的宽度),您需要使用以下方法:

http://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.5.1/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/AxisStyle.html#setInterSeriesPadding(float)

http://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.5.1/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/AxisStyle.html#setInterSeriesSetPadding(float)

我希望这些信息对您有用。谢谢和亲切的问候,

凯。

编辑:

你好斯蒂芬,

感谢您提供额外的信息。

所以今天我创建了一个快速应用程序,使用您的代码用数据填充 Shinobi 图表。

我确实看到了您描述的细条问题。我相信为了纠正这个问题,您还需要调用方法 Axis.setInterSeriesSetPadding(float)。

虽然当您在图表中使用单个系列时并不明显,但此方法确实会影响各个条形之间的间距。默认情况下,如果未显式调用此方法,则条之间的间距很小。

还请记住,这两种方法需要一个介于 0(根本没有填充)和 1 之间的浮点值。我建议您使用参数 0.0 调用这两种方法,然后慢慢增加值,直到达到您想要的外观。您应该只需要在您的类别轴上调用这两种方法,而不是在数据轴上。

在使用您的代码构建我的应用程序时,我确实注意到您使用了条形系列,但您的类别轴位于 x 轴上。我发现当我构建我的应用程序时,它最初只显示 3 个条,因为第一个类别(“q1”)被呈现为具有零数据值。这是因为类别在内部被赋予了一个整数索引,因此第一个类别使用 0 索引存储。

使用条形系列的典型方法是将类别放在 y 轴上,将数据值放在 x 轴上。我修改了我的应用程序以使用此配置,我发现所有 4 个条都正确显示。此外,我能够有一个填充范围从没有,条相互对接的地方,到很多条看起来很薄的填充。

我希望这个对你有用,

谢谢,

凯。免责声明:我为 ShinobiControls 工作。

于 2014-08-26T14:42:46.510 回答