2016-08-18 7 views
-1

d3jsを使用してグラデーションバーを実装しようとしています.2色を指定すると、最初のカラー値から始まり他のカラー値で終わるグラデーションカラーを表示する必要があります。d3jsを使用してカラーグラデーションバーを作成する方法

だから、次のようになります。

vertical gradient bar with numbers down the right hand side

をこれはビンの色が各点に周波数を示し、私は六角形のビンを使用して実装してい散布チャートの凡例です。データを動的に構築するので、これを別の動的に構築されたSVGに追加する必要があります。

+1

あなたが達成しようとしていると、なぜあなたはD3が必要なのですものの文脈とは何ですか? – ksav

+0

私は六角形のビンを使って散布図を作成しています。ビンの色は各点の頻度を示しています。そのため、棒グラフが必要です。 –

+0

これは散布図の凡例です – ksav

答えて

2

あなたのsvg defsにグラデーションを作成し、それを任意のsvgシェイプに適用することができます。

<svg width="800" height="600" version="1.1" xmlns="http://www.w3.org/2000/svg"> 
 
     <defs> 
 
      <linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1"> 
 
      <stop offset="0%" stop-color="red"/> 
 
      <stop offset="100%" stop-color="yellow"/> 
 
      </linearGradient> 
 
     </defs> 
 

 
     <rect x="10" y="120" width="15" height="100" fill="url(#Gradient2)"/> 
 
     
 
    </svg>

フィドル:https://jsfiddle.net/gejuxmdx/1/

編集:あなたは、プレーンSVGとしてこれをハードコーディングしたり、他のSVGと同じようにD3でそれを作成することができます。

EDIT2:D3

var svgSelect = d3.select('body').append('svg').attr('width',800).attr('height', 600); 
 

 
var defs = svgSelect.append('defs'); 
 

 
var lg = defs.append('linearGradient') 
 
.attr('id', 'Gradient2') 
 
.attr('x1', 0) 
 
.attr('x2', 0) 
 
.attr('y1', 0) 
 
.attr('y2', 1); 
 

 
lg.append('stop') 
 
.attr('offset', '0%') 
 
.attr('stop-color', 'red'); 
 

 
lg.append('stop') 
 
.attr('offset', '100%') 
 
.attr('stop-color', 'yellow'); 
 

 

 
svgSelect.append('rect') 
 
.attr('x', 10) 
 
.attr('y', 120) 
 
.attr('width', 20) 
 
.attr('height', 120) 
 
.style("fill", "url(#Gradient2)"); 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

+0

d3jsを使ってこれを行う方法はありますか?私はデータを動的に構築しているので、それは役に立たないでしょう。 –

+0

ご返信ありがとうございますが、javascriptコードは機能しません。 –

+0

'ReferenceError:svgSelectが定義されていません。 ' – ManoDestra

2

と同じことを行うためにここにいくつかの作業d3のコードがあります。

colorsアレイを調整すると、コードがデータ駆動になります!

var colors = [ 'rgb(255,0,0)', 'rgb(255,255,0)' ]; 
 

 
var svg = d3.select('body') 
 
    .append('svg') 
 
    .attr('width', 100) 
 
    .attr('height', 200); 
 

 
var grad = svg.append('defs') 
 
    .append('linearGradient') 
 
    .attr('id', 'grad') 
 
    .attr('x1', '0%') 
 
    .attr('x2', '0%') 
 
    .attr('y1', '0%') 
 
    .attr('y2', '100%'); 
 

 
grad.selectAll('stop') 
 
    .data(colors) 
 
    .enter() 
 
    .append('stop') 
 
    .style('stop-color', function(d){ return d; }) 
 
    .attr('offset', function(d,i){ 
 
    return 100 * (i/(colors.length - 1)) + '%'; 
 
    }) 
 

 
svg.append('rect') 
 
    .attr('x', 10) 
 
    .attr('y', 10) 
 
    .attr('width', 50) 
 
    .attr('height', 150) 
 
    .style('fill', 'url(#grad)'); 
 

 

 
      
 
     
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

関連する問題