결과 표에서 막 대형 차트를 만들 때 d3.js를 사용하고 있습니다. 모든 코드는 아래와 같습니다. 한 테이블은 CSV 파일에서 데이터를 가져옵니다. 그런 다음 다른 테이블에 복제하면 바 차트 막대가 바뀌기를 원합니다. 그러나 새로운 막대 차트가 대신 만들어집니다. 조언이나 도움을 주시면 감사하겠습니다.D3.js 막 대형 차트가 추가되지 않고 새로운 차트가 생성됩니다.
updateCode()
function test()
{
var source = document.getElementById('table');
var destination = document.getElementById('myclonediv');
var copy = source.cloneNode(true);
copy.setAttribute('id', 'myclonediv');
destination.parentNode.replaceChild(copy, destination);
var canvas;
createGraph()
}
function createGraph()
{
d3.csv(googlesheet, function(data) {
//create container - canvas
canvas = d3.select("body").append("svg")
//width and height
.attr("width", 300)
.attr("height", 1000)
//add bars - rectangle
canvas.selectAll("rect")
//loading data variable
.data(data)
//enter method
.enter()
//append rectangle for each element
.append("rect")
//width - d will reference data, d.age - from csv file * 10 so bars are bigger
.attr("width", function(d) { return d.Random * 10})
//was 50 now 48 to allow space between bars
.attr("height", 48)
// y function of the index, for each element
.attr("y", function(d, i) { return i *50})
//colour blue
.attr("fill", "blue");
//var newData = parsedCSV.replace(',', '');
//var test = parsedCSV.substring(parsedCSV.indexOf(",") + 1);
//add text to each bar - repeat before
canvas.selectAll("text")
.data(data)
.enter()
.append("text")
//white text
.attr("fill", "red")
//same position on each bar -- + 24 is half of 48 in height -- now middle of bar
.attr("y", function(d,i) { return i *50+24})
//what text - d.name
.text(function(d) { return d.Random; })
})
}
function remove()
{
var tableCode = d3.select("#table");
tableCode.selectAll("*").remove();
updateCode()
}
function updateCode()
{
var tabulate = function (data,columns) {
var table = d3.select('#table').append('table')
var thead = table.append('thead')
var tbody = table.append('tbody')
thead.append('tr')
.selectAll('th')
.data(columns)
.enter()
.append('th')
.text(function (d) { return d })
var rows = tbody.selectAll('tr')
.data(data)
.enter()
.append('tr')
var cells = rows.selectAll('td')
.data(function(row) {
return columns.map(function (column) {
return { column: column, value: row[column] }
})
})
.enter()
.append('td')
.text(function (d) { return d.value })
return table;
}
d3.csv(googlesheet,function (data) {
var columns = ['Test','Random']
tabulate(data,columns)
})
}
답장을 보내 주셔서 감사합니다. 내가 이것을하면 바에 추가됩니다. 따라서 막대가 처음 나타나고 5 일 때, 업데이트 할 때 막대가 1이어야합니다. 이제는 6이됩니다. 이전 막대가 삭제되기를 원하지 않습니다. http://d3js.org/d3.v3.min.js를 사용 중입니다. – Nicola