2017-07-14 8 views
1

私はD3.jsの新しいもので一般的なコーディングであると言ってこれを前に説明します。私はインフォグラフィックアーティストであり、私はQGISを使って地図を作成していましたが、D3.jsを使ってオピオイドの死亡に関するストーリーのchoroplethマップを作成しようとしています。基本的に私はこのマップを再作成しようとしています。 map from the EconomistChoroplethの地図縮尺と伝説

私はマイク・ボストックことで、このmapを使用し、いくつかのパラメータを変更することにより、起動しようとしているが、色の範囲と規模で立ち往生しています。測定は人口10万人につき1です。私は1.543385761で始まり、131.0814217で終わるドメインを持っています。

私が苦しんでいるコードは、スケール入力と出力の周りです:

var x = d3.scaleLinear() 
    .domain([0, 132]) 
    .rangeRound([600, 860]); 

var color = d3.scaleThreshold() 
    .domain(d3.range(2, 10)) 
    .range(d3.schemeBlues[9]); 

var g = svg.append("g") 
    .attr("class", "key") 
    .attr("transform", "translate(0, 40)"); 

g.selectAll("rect") 
    .data(color.range().map(function(d) { 
     d = color.invertExtent(d); 
     if (d[0] == null) d[0] = x.domain()[0]; 
     if (d[1] == null) d[1] = x.domain()[1]; 
     return d; 
    })) 
    .enter().append("rect") 
    .attr("height", 8) 
    .attr("x", function(d) { return x(d[0]); }) 
    .attr("width", function(d) { return x(d[1]) - x(d[0]); }) 
    .attr("fill", function(d) { return color(d[0]); }); 

私はオーバー最も暗い色など、すべて25とを定義するコードの一部のビットを必要としていることがわかります。それを私の最終的な伝説にしたいとは確信していませんが、私はそれを再現する方法を知りたいです。私はショックを受けました。私はこれまでこれを得ることができましたが、今は少し失われていると感じます。前もって感謝します!

+0

私はここにいくつかの例を見つけました:https://d3-geomap.github.io/map/choropleth/us-states/、ここで:https://plot.ly/ javascript/choropleth-maps/ – Carson

+0

ウェブサイトで公式文書をチェックしてください。 https://d3js.org/。正直言って、ソフトウェア開発の巨大な部分は、単にGoogleへの解決方法を知っていて、問題の解決策を見つけることだけです。 – Carson

答えて

0

はのは、あなたの規模を見てみましょう:

var color = d3.scaleThreshold() 
    .domain(d3.range(2, 10)) 
    .range(d3.schemeBlues[9]); 

あなたのドメインがそうのように作成されたの配列です:

d3.range(2,10) // [2,3,4,5,6,7,8,9] 

は、これらはあなたの閾値である、色は以下である値に基づいてマッピングされます2つ以上、3つ以上、3つ以上、4つまで...および9を超える。このドメインは、範囲内で定義される9つの値にマッピングされる。

d3.schemeBlues[9] // ["#f7fbff", "#deebf7", "#c6dbef", "#9ecae1", #6baed6", #4292c6", "#2171b5", "#08519c", "#08306b"] 

25以上の値が一つの色になるように、それらの色のしきい値を設定し、適切な閾値(S)を有する配列を有するドメインを定義するには以下のスニペットで

.domain([2,3,4,5,6,7,8,25]); 

を、このドメインが適用されます。四角形の色はその位置に依存し、四角形は25番目(左から右に数えて1つずつ)の色が1つの色になります。

var color = d3.scaleThreshold() 
 
    .domain([2,3,4,5,6,7,8,25]) 
 
    .range(d3.schemeBlues[9]); 
 
    
 
var svg = d3.select("body") 
 
    .append("svg") 
 
    .attr("width",500) 
 
    .attr("height",500); 
 
    
 
var rects = svg.selectAll("rect") 
 
    .data(d3.range(100)) 
 
    .enter() 
 
    .append("rect") 
 
    .attr("width",15) 
 
    .attr("height", 15) 
 
    .attr("y", function(d,i) { return Math.floor(i/10) * 20 + 10 }) 
 
    .attr("x", function(d,i) { return i % 10 * 20 }) 
 
    .attr("fill", function(d) { return color(d); })
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.5.0/d3.min.js"></script> 
 
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>

+0

Andrew ....これは間違いなくさらに私を得たが、完全には私が必要なところではない。私の混乱の一部は、ドメインが範囲にどのように関連し、どのようにキーに伝わるかにあります。エコノミストの例では、彼らは5まで段階的に25まで変化します(schemeBluesでは6段階の色が... [6])。私はその部分を稼働させましたが、私はデータセット内にあるいくつかの郡を見逃していますが、地図上に現れていないようです(しきい値問題のようですか?)。私はまた、 "var rects"で始まっているコードが何をしているのか不明ですが、マップコードにそれを壊さずにプラグインできないようです。 –

+0

地図上に表示するデータがないため、矩形は視覚的にスケールを示すだけのものでした。スレッショルド(ドメイン)5,10,15,20,25を持つスレッショルドスケールには6ステップがありますので、範囲に6つの有効な色がある場合は、任意の数値を適切な色にマッピングする必要があります。特定の郡が正しく色付けされている場合は、すべての郡にデータがあるわけではなく、すべての郡IDが地理フィーチャIDと一致するわけではないか、または使用しているデータフィールドにすべての数値が含まれていないことがあります。あなたがデータにリンクする場合それが役立つだろう(必要であれば、あなたはそれをランダム化できる) –

+0

私はCSVを添付することはできませんが、ここで、行の最初の束です: IDは、死亡 1003,9.817926552 1009,20.8069634 1073,21.50319444 1097,6.259102782 1117,5.270395232 2020,14.06116607 2122,22.39101604 2170,10.88085464 4003,19.77425708 4005,8.627073194 –

関連する問題