Tôi muốn vẽ biểu đồ thanh bằng cách sử dụng các chuỗi làm nhãn cho các dấu trên trục x (ví dụ: Năm 1, Năm 2, vv thay vì 0,1,2, v.v ...) .D3 - sử dụng chuỗi cho các dấu trục
tôi bắt đầu bằng cách sử dụng các giá trị số cho trục x (ví dụ, 0,1,2,3, vv) như sau:
1) Tôi tạo ra dãy của tôi:
x = d3.scale.ordinal()
.domain(d3.range(svg.chartData[0].length)) //number of columns is a spreadsheet-like system
.rangeRoundBands([0,width], .1);
y = d3.scale.linear()
.domain(Math.min(d3.min(svg.chartData.extent),0), Math.max(d3.min(svg.chartData.extent),0)])
.range([height, 0])
.nice();
2) Thực hiện các trục:
d3.svg.axis()
.scale(x);
3) Vẽ lại các trục:
svg.select(".axis.x_axis")
.call(make_x_axis().orient("bottom").tickSubdivide(1).tickSize(6, 3, 0));
Điều này hoạt động tốt với các nhãn trục số mặc định.
Nếu tôi cố gắng sử dụng một mảng các chuỗi cho tickValues x như thế này ....
d3.svg.axis()
.scale(x).tickValues(svg.pointsNames); //svg.pointsNames = ["Year 1", "year 2", etc.]
... khi tôi vẽ lại bảng xếp hạng (có hoặc không có thay đổi đối với dữ liệu/cài đặt), các nhãn trao đổi như thế này.
Chú ý cách Col 1 mất nơi Col 0 và ngược lại.
Bạn có biết tại sao điều này xảy ra không?
Cảm ơn Jibi, pointsNames được sắp xếp khi chúng được tạo cùng với dữ liệu số: khi tôi điền cột vào biểu đồ, tôi đẩy tên trong mảng tên. Tôi cũng đã kiểm tra trong giao diện điều khiển rằng các pointsNames luôn theo thứ tự đúng. Điều kỳ lạ là bắt đầu tốt khi lần đầu tiên biểu đồ được khởi tạo, sau đó hoán đổi và tiếp tục đổi chỗ sau đó. Vì vậy, nó hoán đổi chỉ ở lần vẽ lại đầu tiên. Cảm ơn bạn đã liên kết: Tôi nên sử dụng axis.tickFormat ([format]) trong trường hợp của mình như thế nào? Cảm ơn một lần nữa. – Gian
Tôi đồng ý với @Jibi, chức năng tickFormat là một cách sạch sẽ hơn để giải quyết vấn đề. –
@Pablo, bạn có thể vui lòng chỉ cho tôi cách sử dụng nó axis.tickFormat ([format]) trong trường hợp của tôi không? Làm thế nào tôi có thể forma [0, 1, 2, vv] hoạt động như các chuỗi đến từ một mảng khác? – Gian