Şu anda D3 kullanarak React uygulamasında çizim oluşturmaya çalışıyorum. Her ikisini de birleştirmek için aşağıdaki bağlantıyı kullandım:React uygulamasında D3 grafiğini Duyarlı hale getirme
http://oli.me.uk/2015/09/09/d3-within-react-the-right-way/.
Ben de duyarlı grafiği yapmak için bağlantıda verilen çözümleri denedim:Resize svg when window is resized in d3.js
o kene atlayarak başlar tepki ile bütünleştirerek üzerine bağımsız kodunda iyi çalışıyor olsa da. Ben yeni bilgilerle yeniden işlemek için tepki başlatılmasında önemli, setstate veya boyutlandırmak üzerine bir şey gerek gerekebilir
var data = [
{"mytime": "2015-12-01T11:10:00.000Z", "value": 64},
{"mytime": "2015-12-01T11:15:00.000Z", "value": 67},
{"mytime": "2015-12-01T11:20:00.000Z", "value": 70},
{"mytime": "2015-12-01T11:25:00.000Z", "value": 64},
{"mytime": "2015-12-01T11:30:00.000Z", "value": 72},
{"mytime": "2015-12-01T11:35:00.000Z", "value": 75},
{"mytime": "2015-12-01T11:40:00.000Z", "value": 71},
{"mytime": "2015-12-01T11:45:00.000Z", "value": 80}
];
var parseDate = d3.time.format("%Y-%m-%dT%H:%M:%S.%LZ").parse;
data.forEach(function(d) {
d.mytime = parseDate(d.mytime);
});
//var margin = { top: 30, right: 30, bottom: 40, left:50 },
var margin = { top: 30, right: 30, bottom: 40, left:50 },
height = 200,
width = 800;
var color = "green";
var xaxis_param = "mytime";
var yaxis_param = "value"
var params1 = {margin:margin,height:height,width:width, color: color, xaxis_param:xaxis_param, yaxis_param :yaxis_param};
draw_graph(data,params1);
function draw_graph(data,params){
//Get the margin
var xaxis_param = params.xaxis_param;
var yaxis_param = params.yaxis_param;
var color_code = params.color;
var margin = params.margin;
var height = params.height - margin.top - margin.bottom,
width = params.width - margin.left - margin.right;
var x_extent = d3.extent(data, function(d){
return d[xaxis_param]});
var y_extent = d3.extent(data, function(d){
return d[yaxis_param]});
var x_scale = d3.time.scale()
.domain(x_extent)
.range([0,width]);
var y_scale = d3.scale.linear()
.domain([0,y_extent[1]])
.range([height,0]);
//Line
var lineGen = d3.svg.line()
.x(function (d) {
return x_scale(d[xaxis_param]);
})
.y(function (d) {
return y_scale(d[yaxis_param]);
});
var myChart = d3.select('body')
.append("div")
.classed("svg-container", true)
.append('svg')
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("viewBox", "0 0 800 600")
//class to make it responsive
.classed("svg-content-responsive", true)
.attr('class','my-chart')
.style('background', '#E7E0CB')
.append('g')
.attr('transform', 'translate('+ margin.left +', '+ margin.top +')');
myChart
.append('svg:path')
.datum(data)
.attr('class', 'line')
.attr("d",lineGen)
.attr('stroke', color_code)
.attr('stroke-width', 1)
.attr('fill', 'none');
var legend = myChart.append("g")
.attr("class", "legend")
.attr("transform", "translate(" + 5 + "," + (height - 25) + ")")
legend.append("rect")
.style("fill", color_code)
.attr("width", 20)
.attr("height", 20);
legend.append("text")
.text(yaxis_param)
.attr("x", 25)
.attr("y", 12);
var vGuideScale = d3.scale.linear()
.domain([0,y_extent[1]])
.range([height, 0])
var vAxis = d3.svg.axis()
.scale(vGuideScale)
.orient('left')
.ticks(5)
var hAxis = d3.svg.axis()
.scale(x_scale)
.orient('bottom')
.ticks(d3.time.minute, 5);
myChart.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(hAxis);
myChart.append("g")
.attr("class", "y axis")
.call(vAxis)
}
ancak varlık: https://jsfiddle.net/adityap16/11edxrnq/1/
Kod Bağımsız D3: yalnız D3 için jsfiddle Çalışma React için yeni, çalışmayı başaramıyorum.
Düzenleme: Ben hala düzenleme yapmaya çalışıyorum ama pencereyi küçültürken, tam bir ekranda değil, görebildiğiniz zaman, sorun, x ekseni ve y ekseni üzerindeki keneler gibi görünüyor. Hala nedenini anlamaya çalışıyorsun?
Teşekkürler!
hata dışında svg duyarlı olmamak için neden olan Tepki olmalıdır. Sonuçta, 'viewbox' ve' width: 100%; yükseklik:% 100 'svg duyarlı hale getirmek için gereken tek şey. Svg'nin ebeveyni kullanmaya başladığından emin olmak için DOM yapınıza bakmayı deneyin. – Kujira
Bir hataya neden olmayacak şekilde, hem xaxis hem de yaxis üzerindeki keneler atlanır. Görünüm kutusunda ve alt dolguda .css dosyasında genişlik ve yükseklik ayarlamayı denedim, ancak boşuna. –
Jsfiddle'da da sorunu yeniden oluşturabilir misiniz? Sorunu çalışmaktan ziyade kırılmış bir kopya görerek görmek daha kolay. – Kujira