2013-07-29 20 views
10

作成したSVGビジュアライゼーションファイルを保存して処理したいので、CSSを使用しません。つまり、インラインスタイルを使用する必要があります。これまでのところ私はd3を完璧なものとして経験したので、私は間違ったことをした可能性が最も高いです。軸のインラインスタイルのストローク幅が太字の目盛りラベル

太い軸線を描くには{'stroke-width': '3px'}が必要です。しかし、太字の軸ラベルを作成します。私はテキストを{'font-style': 'normal'}のようなフォント関連のスタイルで制御することを期待していました。

「ストローク幅」の使い方は何ですか?私はChromeとFirefoxの両方でこれをテストしました。ここ

は私のコードです:軸機能へ

<script> 
    var margin = {top: 20, right: 10, bottom: 20, left: 40}; 
    var width = 960 - margin.left - margin.right; 
    var height = 100 - margin.top - margin.bottom; 

    var x = d3.scale.linear().range([0, width]); 
    var y = d3.scale.linear().range([0, height]); 
    var xAxis = d3.svg.axis().scale(x).orient("bottom"); 
      // .tickFormat(d3.time.format("%H:%M")); 
    var yAxis = d3.svg.axis().scale(y).orient("left").ticks(height/10); 

    var svg = d3.select("svg"); 
    var vis = svg.append("g") 
     .attr("transform", "translate(" + margin.left + "," + margin.top + ")") 
     .style({'font-size': '10px', 'font-family': 'sans-serif', 
      'font-style': 'normal', 'font-variant': 'normal', 
      'font-weight': 'normal'}); 

    var redraw = function(selection, data, style) { 
     selection.selectAll(".bar") 
      .data(data) 
      .enter().append("rect") 
      .attr('class', "bar") 
      .attr("x", function(d) { return x(d[0]) - .5; }) 
      .attr("y", function(d) { return y(d[1]); }) 
      .attr("width", 5) 
      .attr("height", function(d) { return height - y(d[1]); }) 
      .style(style); 

     vis.select(".x.axis").call(xAxis); 
     vis.select(".y.axis").call(yAxis); 
    }; 

    svg.attr("width", width + margin.left + margin.right) 
     .attr("height", height + margin.top + margin.bottom); 

    vis.append("g") 
     .attr("class", "x axis") 
     .attr("transform", "translate(0," + height + ")") 
     .style({ 'stroke': 'Black', 'fill': 'none', 'stroke-width': '3px'}) 
     .call(xAxis); 

    vis.append("g") 
     .attr("class", "y axis") 
     .style({ 'stroke': 'Black', 'fill': 'none', 'stroke-width': '3px'}) 
     .call(yAxis); 

    // now we draw the first barchart (we do not know about the 2nd one yet) 
    var data1 = [[2,0.5], [4,0.8], [6,0.6], [8,0.7], [12,0.8]]; 
    x.domain([0, 13]); 
    y.domain([0.9, 0]); 

    vis.append("g") 
     .attr("class", "bar1"); 

    vis.select(".bar1") 
     .call(redraw, data1, {'fill': 'Red', 'stroke': 'Black'}); 
</script> 

答えて

20

私はexplunitの答えに構築され、より選択的にストローク幅を適用します。ここで私は結局何をしたのですか:

vis.selectAll('.axis line, .axis path') 
    .style({'stroke': 'Black', 'fill': 'none', 'stroke-width': '3px'}); 
10

.callはあなたに一度にすべてのそれらのラインとテキスト要素を作成するための良い方法を与えるが、その後、戻って来てからあなたを止めるものは何もありません作成されたものの個々の部分を選択し、さらにスタイリングを行います。このような何か:

var yAxisNodes = vis.append("g") 
    .attr("class", "y axis") 
    .style({ 'stroke': 'Black', 'fill': 'none', 'stroke-width': '3px'}) 
    .call(yAxis); 
yAxisNodes.selectAll('text').style({ 'stroke-width': '1px'}); 
関連する問題