0

BarSeries のバーの幅を忍で設定しようとしています。コードは次のとおりです。

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);

何が起こるかというと、その行css1.setLineWidth(180.0f);は完全に無視されます。1.0forを入れることができ1000.0f、線は何があっても常に同じ幅です。

私は何が欠けているか、間違っていますか? 忍1.5.1を使用しています。


編集: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または20f、何も変わりません。chart.addSeries(cs);


編集:カイの答えに従ってください。

で遊んでみましたが、パディング値としてsetInterSeriesPaddingアプローチ1.fするとバーが縮小しますが、設定0fするとバーの高さが最小になり、それらの間のスペースは「大きい」ままになります。

より明確にするために: Y 軸の 0 から 4 に、異なる X 値を持つ 4 つのバーがあります。それぞれが多かれ少なかれ Y 値を中心にしています (それほど重要ではありませんが、現時点では重要ではありません)。たとえば、2 を中心とするバーは ~1.8 から ~2.2 になり、3 を中心とするバーは ~2.8 から ~3.2 になります。~1.55 から ~2.45 および ~2.55 から ~3.45 になるように、それらをより厚くします。それ、どうやったら出来るの?


編集 2 (画像):

実際:

実結果

望ましい(ペイントスキルがなくて申し訳ありません。それは、私がそれらをより厚くしたいことを示すための方法でした): 望ましい結果

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)

この情報がお役に立てば幸いです。よろしくお願いいたします。

カイ。

編集:

こんにちは。

追加情報をありがとう。

そこで今日は、あなたのコードを使って忍チャートにデータを入力する簡単なアプリを作成しました。

あなたが説明した細い棒の問題を見ました。これを修正するには、メソッド Axis.setInterSeriesSetPadding(float) も呼び出す必要があると思います。

チャートで 1 つの系列を使用する場合は明らかではありませんが、この方法は個々のバー間の間隔に影響を与えます。このメソッドが明示的に呼び出されない場合、デフォルトでは棒の間に小さな間隔があります。

また、これら 2 つのメソッドは 0 (パディングなし) から 1 の間の float 値を想定していることにも注意してください。これらのメソッドの両方をパラメーター 0.0 で呼び出し、希望する外観になるまでゆっくりと値を増やしていくことをお勧めします。データ軸ではなく、カテゴリ軸でこれら 2 つのメソッドを呼び出すだけで済みます。

あなたのコードでアプリを構築しているときに、棒シリーズを使用していることに気付きましたが、x 軸にカテゴリ軸があります。最初のカテゴリ ("q1") がゼロのデータ値を持つものとしてレンダリングされたため、アプリをビルドしたときに、最初は 3 本のバーしか表示されませんでした。これは、カテゴリに内部的に整数インデックスが与えられているためで、最初のカテゴリは 0 インデックスで格納されます。

棒シリーズを使用する一般的な方法は、カテゴリを y 軸に、データ値を x 軸に配置することです。この構成を使用するようにアプリを変更したところ、4 本のバーがすべて正しく表示されることがわかりました。さらに、バーが互いに突き合わされている何もないものから、バーが薄く見える多くのパディングまで、さまざまなパディングを持つことができました。

これがお役に立てば幸いです。

ありがとう、

カイ。免責事項: 私は ShinobiControls で働いています。

于 2014-08-26T14:42:46.510 に答える