軸の目盛りを整数のみにする方法は?
私が試したのは、ティックオプションを使用することです。
tick: {
format: function(x) {
return (x == Math.floor(x)) ? x : "";
}
}
これにより、ラベルに整数のみを表示できますが、軸上の分割線は引き続き存在します。
軸ティックを制御する方法はありますか?
現在の開発バージョン(マスター)では、 axis.y.valuesを使用してティックのリストを設定できます。 例えば
{
axis: {
y: {
ticks: [1,2,3]
}
}
}
しかし、これはデータソースに基づいて動的にすることはできませんよね?
あなたは、データのロード後にそれらの値を計算し、それを設定することができますchart.internal.config.axis_y_tick_values
、次に呼び出すchart.flush()
新しい軸の値を適用します。
このコードはどうですか?
axis: {
y: {
tick: {
format: function (x) {
if (x != Math.floor(x)) {
var tick = d3.selectAll('.c3-axis-y g.tick').filter(function () {
var text = d3.select(this).select('text').text();
return +text === x;
}).style('opacity', 0);
return '';
}
return x;
}
}
}
}
すでに解決しているようですので、閉じさせてください。
FWIW、D3の内部を知り、JSを実行する必要があるのは本当に奇妙に思えます。 これらのC3の問題には、そのパターンがよく見られます。誰かに問題があり、C3オプションを提供する代わりに、基礎となるSVGをd3で操作する5〜30行のJavaScriptが受け入れられた解決策です。 長期的には、それはC3の採用に大きな悪影響を与えると思います。
特にこの問題の場合、「axis.y.tick.integer_only」オプションは非常に価値があります。 このためにC3の拡張機能を提供したいと思います。 ここに拡張機能の例があり
ありがとう!
編集:文法。
データの読み込み後にこれらの値を計算し、chart.internal.config.axis_y_tick_valuesに設定してから、chart.flush()を呼び出して新しい軸の値を適用できます。
これを参照すると、今日もこの問題が発生したため、 flush()
すると、データ変更のアニメーションが台無しになり、遅延を追加すると、グラフィックの不具合も発生します。 ただし、 load()
呼び出す前にchart.internal.config.axis_y_tick_values
を適切な値に設定すると、完全に機能します。 多分これは誰かのために役立つでしょう:)。
より良いバージョン:
axis: {
y: {
tick: {
format: function(x) { return x % 1 === 0 ? x : ''; }
}
}
}
ありがとうnnabinh-御馳走を働いた。
最も参考になるコメント
より良いバージョン: