2017-11-01 5 views
1

私は次のようなバブルチャートを持っている:d3js:X軸上の特定の目盛りの値を置き換え

enter image description here

私が使用していたデータの形式は次のとおりです。

var data = [{name: "A", rank: 1, student_percentile: 100.0, 
     admit_probability: 24}, 
     {name: "B", rank: 45, student_percentile: 40.3, 
     admit_probability: 24}, 
     {name: "C", rank: 89, student_percentile: 89.7, 
     admit_probability: 24}, 
     {name: "D", rank: 23, student_percentile: 10.9, 
     admit_probability: 24}, 
     {name: "E", rank: 56, student_percentile: 30.3, 
     admit_probability: 24}, 
     {name: "F", rank: 34, student_percentile: 110, 
     admit_probability: 84}]; 

入力値の中には正しいパーセンタイル値がありませんので、デフォルトで110を入れています。これらの値をプロットしたいのですが、110ではなく、X軸に "NAN"を表示します。たとえば、ここでは "F"はX軸の値が110であるため、その値を "NAN"としてマークします。

X軸の値を置き換えるにはどうすればよいですか?

次のように私のスクリプトは次のとおりです。

var xscale = d3.scaleLinear() 
     .domain(
       d3.extent(data, function(d) { return +d.student_percentile; }) 
      ) 
     .nice() 
     .range([0, width]); 

    var yscale = d3.scaleLinear() 
     .domain(d3.extent(data, function(d) { return +d.rank; })) 
     .nice() 
     .range([height, 0]); 

    var xAxis = d3.axisBottom().scale(xscale); 

    var yAxis = d3.axisLeft().scale(yscale); 

答えて

1

使用tickFormatその特定の値に変更する:ここで

.tickFormat(function(d) { 
    return d === 110 ? "NAN" : d 
}) 

はデモです:

var svg = d3.select("svg"); 
 

 
var scale = d3.scaleLinear() 
 
    .domain([0, 110]) 
 
    .range([20, 480]); 
 

 
var axis = d3.axisBottom(scale) 
 
    .tickFormat(function(d) { 
 
    return d === 110 ? "NAN" : d 
 
    }) 
 

 
svg.append("g").attr("transform", "translate(0,50)") 
 
    .call(axis)
<script src="https://d3js.org/d3.v4.min.js"></script> 
 
<svg width="500" height="100"></svg>

+0

正確に私が必要としたもの。ありがとうたくさん:) – Yesha

+0

私は1つの問題に直面しています。値の差が小さくなるにつれて(90,95,100,105,110)、X軸スケールが入力データに基づいて動的に選択されるので、「NAN」に対して2つの別々の値が得られます。 tickFormat(機能(D){ \tリターンD> 100 "NAN"::?D } は、私のような行を変更しました。私は "NAN" と100以上の何かをしたい つだけな目盛り – Yesha

+0

@はい、これは別の問題ですから、新しい質問を投稿し、あなたの値を正確に説明し、軸を示す[MCVE]を付けることをお勧めします。ここでは別の質問があります。あなたは1ティックだけを表示したいと思っています(数字でも文字列でも関係ありません) –

関連する問題