将两个图形(饼图和条形图)并排对齐::d3-js
Aligning two graphs(Pie and Bar) side by side :: d3 js
我对D3js有点陌生。我需要将两个图形(条形图和饼图)并排对齐,这两个图形将显示在仪表板上。当我将单独的.html文件用于条形图和饼图时,它们工作得很好,但当我将它们组合成一个.html文件时,图表会重叠。
我尝试过更改与"svg"和相应的x和y轴相关的不同参数,但没有成功。
有两个csv文件(饼图数据.csv和条形图数据.csv),将从中拾取数据。
以下是我的代码::
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.arc text {
font: 10px sans-serif;
text-anchor: middle;
}
.arc path {
stroke: #fff;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var width = 500,
height = 500,
radius = Math.min(width, height) / 2;
var color = d3.scale.ordinal()
.range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(0);
var labelArc = d3.svg.arc()
.outerRadius(radius - 40)
.innerRadius(radius - 40);
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.ticket_count; });
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
d3.csv("pie-data.csv", type, function(error, data) {
if (error) throw error;
var g = svg.selectAll(".arc")
.data(pie(data))
.enter().append("g")
.attr("class", "arc");
g.append("path")
.attr("d", arc)
.style("fill", function(d) { return color(d.data.ticket_meter); });
g.append("text")
.attr("transform", function(d) { return "translate(" + labelArc.centroid(d) + ")"; })
.attr("dy", ".35em")
.text(function(d) { return d.data.ticket_meter; });
});
function type(d) {
d.ticket_count = +d.ticket_count;
return d;
}
////////////////////////////////////////////////
var margin = {top: 20, right: 20, bottom: 70, left: 40},
width = 150 - margin.left - margin.right,
height = 300 - margin.top - margin.bottom;
var x = d3.scale.ordinal().rangeRoundBands([0, width], .05);
var y = d3.scale.linear().range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform",
"translate(" + margin.left + "," + margin.top + ")");
d3.csv("bar-data.csv", function(error, data) {
data.forEach(function(d) {
d.issue_status = d.issue_status;
d.issue_count = +d.issue_count;
});
x.domain(data.map(function(d) { return d.issue_status; }));
y.domain([0, d3.max(data, function(d) { return d.issue_count; })]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", "-.55em")
.attr("transform", "rotate(-90)" );
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
svg.selectAll("bar")
.data(data)
.enter().append("rect")
.style("fill", "steelblue")
.attr("x", function(d) { return x(d.issue_status); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.issue_count); })
.attr("height", function(d) { return height - y(d.issue_count); });
});
</script>
</body>
</html>
请提出任何指针,以便进行对齐。提前谢谢。
您使用同一变量两次:
var svg = d3.select("body").append("svg");
(除此之外,您正在重复其他一些应该是唯一的变量)
将SVG附加到"正文"不是正确的方式,因为当您将SVG附加在正文时,SVG会放在页面的末尾,您将无法将它们并排放置。
解决方案是为每个图表创建一个div,例如ID为#chart1和#chart2,然后创建两个变量:
var svg1 = d3.select("#chart1").append("svg");
和
var svg2 = d3.select("#chart2").append("svg");
不要忘记相应地更改所有其他变量。
更改后,使用CSS将两个div并排对齐。
相关文章:
- 对d3堆叠条形图的数据进行排序
- 将两个图形(饼图和条形图)并排对齐::d3-js
- 如何在nvd3中对条形图进行排序
- 折线图:对齐多个数据集的x轴(时间戳)
- x 轴文本标签未与 D3.js 中的条形对齐
- 如何在剑道 UI 折线图中对齐类别标签
- 高图表没有对条形图/列单击进行深入分析
- 根据 c3 条形图中的坐标对齐外部元素
- 如何对莫里斯条形图进行动画处理
- 使用交叉过滤器在 dc js 中对条形图的数据进行分组时遇到问题
- D3 条形图 X 刻度未对齐
- 堆积条形图和散点对齐
- 水平条形图 y 轴对齐方式
- 使用 D3 对齐问题的多/分组条形图
- 对条形图中的 x 轴使用序号刻度 ('d3.scale.ordinal')
- 高图 - 旋转饼图,将单击的部分对齐到固定点 (180°)
- 使用融合图时如何对齐项目符号图
- Highcharts柱+线组合图,包含多个系列.在柱上发布对齐线
- 在 D3 条形图中,y 轴序数刻度未与条形正确对齐
- 高图,条形图图例与垂直对齐顶部不工作