これは、負の数を扱うことができるようにログスケールを置き換えるものです。私はd3の対数スケールのソースを出発点として使用しようとしていましたが、カスタムスケールの例はあまり見かけませんでした。d3.js v4でasinh(inverse hyperbolic sine)スケールを作成する
10
A
答えて
-3
ドキュメントの最良の例は、スケールの補間機能のようです。私は本当にD3の専門家ではないhttps://github.com/d3/d3-scale/blob/master/README.md#continuous-scales
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"])
.interpolate(d3.interpolateHcl);
を参照してくださいので、私はそれが役に立てば幸い。
7
私が知っている限り、D3でカスタムスケールを作る方法はありません(少なくともあなたが探している意味ではありません)。全てD3スケールは、2つのステップでスケール:
- ドメインを使用して、範囲を使用してdeinterpolation機能
- 与えられた入力をdeinterpolate、出力を
Iを得るために、ステップ1からの中間結果を補間あなたの理想的な答えは基本的に質問に答えるだろう「D3スケールのデインターポレーション機能をカスタム機能に設定するにはどうすればよいですか?、これは現在可能だとは思わない。
ただし、補間機能を設定することができます。 http://bl.ocks.org/mbostock/56ea94205411ee9e4dbec3742f7ad08c
の例では、ちょっと、おそらく何をしたいの反対側にある「魚眼レンズ」効果を、持っていること:マイク・ボストックからのこの例では、D3の安心機能で構築されたのいずれかを使用して補間を設定する方法を示しています。多項式イージング関数d3.easePolyInOut
を使用し、指数が1未満の場合、ログのスケーリングに近づくことができます(私のコードスニペットを参照)。残念ながら、 "logInOut"や "asinhInOut"はありませんので、多項式よりも急峻なロールオフが必要な場合は、独自のイージング/補間関数を作成する必要があります。
var data = Array.from(Array(21), (_,i)=>{return 10*(i-10)})
var svg = d3.select("svg"),
margin = {top: 50, right: 20, bottom: 5, left: 20},
width = svg.attr("width") - margin.left - margin.right,
height = svg.attr("height") - margin.top - margin.bottom,
g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var polyexp = 0.25
var x = d3.scaleLinear()
.domain([-100,100])
.range([0, width])
.interpolate(easeInterpolate(d3.easePolyInOut.exponent(polyexp)));
g.append("g")
.attr("class", "axis axis--x")
.call(d3.axisBottom(x));
g.selectAll("circle").data(data).enter().append("circle")
.attr("cx", (d) => x(d))
.attr("cy", -10)
.attr("r", 3)
.attr("fill", "steelblue")
function easeInterpolate(ease) {
return function(a, b) {
var i = d3.interpolate(a, b);
return function(t) {
return i(ease(t));
};
};
}
.axis text {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.3.0/d3.js"></script>
<svg width="600" height="100"></svg>
関連する問題
- 1. d3.js v4のd3.locale()、ローカライゼーション
- 2. d3.js world topojson v4
- 3. d3.js(v4)で水平凡例を作成
- 4. d3 jsスケールとズームイン
- 5. d3.js v4の連続スケール(例えばscaleLinear)にパディングを設定するには?
- 6. d3 v4 js:属性エラー
- 7. D3.js v4でビン幅を固定してヒストグラムを作成する方法は?
- 8. AngularJSとD3.js V4、d3.json問題
- 9. D3 js V4 - スキャッタプロットの設定
- 10. Cubism.js/d3.jsスケールと範囲
- 11. d3.js v4でエクスポートを再バインド
- 12. {d3.js} V4へ移行V3:V3上のコードワーク(d3.layout.stack())エラーV4(d3.stack())
- 13. D3.js(v4)による線グラフのアニメーション?
- 14. D3 v4で作業時間を作成しますか?
- 15. d3.js-v4積み上げ棒グラフ
- 16. d3.js v4 - ネストされた選択
- 17. d3.js - フォース・レイアウト境界問題V4
- 18. D3.js V4移行の問題
- 19. d3.jsテキストアークを作成する
- 20. d3.js二重棒グラフでスケールを選択する方法は?
- 21. 作成後にD3 v4のマップポイントを変更する
- 22. d3.jsで凡例を作成
- 23. d3.jsで円弧を作成
- 24. D3.js v4で同時にネストしてロールアップする
- 25. D3 js v3からv4への移行のためのJavascriptコンパイル
- 26. d3 v4で無限水平軸を作成
- 27. D3 v4のスタティックフォースレイアウト
- 28. d3 v4 TypeScriptタイプ
- 29. 地図上に緯度/経度をプロットする - D3.js v4
- 30. d3.js v4動的にツリーを整理木に追加する