2017-10-25 21 views
0

私はJavaスクリプトとd3.jsの初心者です。グラフの対応する点に画像を追加したかったのです。私は多くの質問や記事を読んだが、正しく理解できなかった。以下は、この画像は上記のコードの出力である私のコードd3.jsに画像を追加

<!DOCTYPE html> 
<meta charset="utf-8"> 
<style> 
.bar { 
    fill: steelblue; 
} 
.bar:hover { 
    fill: brown; 
} 
.axis--x path { 
    display: none; 
} 
.line { 
    fill: none; 
    stroke: steelblue; 
    stroke-width: 3px; 
} 
.circle { 
    fill: steelblue; 
} 
.axis--y path, .axis--y line { 
    fill: none; 
    stroke: none; 
} 
</style> 
<svg width="960" height="500"></svg> 
<script src="http://localhost/d3.js"></script> 
<script> 
var svg = d3.select("svg"), 
    margin = {top: 50, right: 50, bottom: 30, left: 80}, 
    width = +svg.attr("width") - margin.left - margin.right, 
    height = +svg.attr("height") - margin.top - margin.bottom; 

var x= d3.scaleLinear().rangeRound([0, width]); 

    y = d3.scaleBand().range([height, 0]).padding(0.1); 
var g = svg.append("g") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 
d3.tsv("http://localhost/data1.tsv", function(d) { 
    d.frequency = +d.frequency; 
    return d; 
}, function(error, data) { 
    if (error) throw error; 

    var line = d3.line() 
    .x(function(d) { return x(d.frequency); }) 
    .y(function(d) { return y(d.letter)+30; }) 
    .curve(d3.curveStepAfter); 

    x.domain([0, d3.max(data, function(d) { return d.frequency; })]); 

    y.domain(data.map(function(d) { return d.letter; })); 

    g.append("g") 
     .attr("class", "axis axis--x") 
     .attr("transform", "translate(0," + height + ")") 
     .call(d3.axisBottom(x)); 

    g.append("g") 
     .attr("class", "axis axis--y") 
     .call(d3.axisLeft(y)) 
    .append("text") 
     .attr("transform", "rotate(-90)") 
     .attr("y", 6) 
     .attr("dy", "0.71em") 
     .attr("text-anchor", "end") 
     .text("letter"); 

    g.append("path") 
    .datum(data) 
    .attr("class", "line") 
    .attr("d", line); 

}); 
</script> 

です:

This image is the output of the above code私は下のリンクのように行にアイコンや小さな画像を追加したい

この画像は私が私のチャートにアイコンを追加する方法を示しています。

This image shows how I want to add icons to my chart

私に似た質問がHow do I display an icon at a point on a line chart using d3.jsですが、それは私にとってはうまくいかず、自分のカスタムアイコンも追加したいと思います。

誰か助けてもらえますか?私はかなり長い間これをやろうとしています。

+0

イメージタグを試しましたか? https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image – GramThanos

+0

同様の質問の回答は問題ではありません。そのアプローチを使って埋め込みアイコンをどのように試していますか教えてください。また、いくつかのデータを追加できますか? – Shashank

+0

上記のコードで描いた円の代わりに私のシステムに保存されている画像を追加しようとしています。 –

答えて

0

あなたはこのexampleのようにツールチップのために画像を追加するために探している場合は、することによって、このexample置き換えるドットを見て、データポイントなどの画像を追加するために探している場合

focus.append('svg:image') .attr({ 'xlink:href': 'test.png', x: 0, y: 0, width: 10, height: 10 });

のようなものを追加することにより、画像によって円を置き換えます上記のコードのように画像。

+0

私は、次のコード g.append( '画像') .DATA(データ) .ATTR追加した( "のxlink:hrefの"、 "HTTP://localhost/whatsapp-logo.jpg") .ATTRを.attr( "y"、function(d){return y(d.letter)+30;}) .attr( "x"、function d){return x(d.frequency);}ただし、最初の画像の最初の画像のみが表示され、残りは表示されません。どうしてこんなことに? –