javascript - 使用 d3js 的 onclick 在新选项卡中绘制图表

标签 javascript svg d3.js plot onclick

我的主页上有一个尺寸很小的图,当我单击该图时,我希望它在新选项卡中以放大的尺寸打开该图。

我尝试了以下操作,但它只是打开一个新选项卡,但没有绘制任何内容。 假设 vis 是包含当前绘图的元素,当单击 vis 时,它应该在新窗口中绘制更大的相同图形。

max value、data、date_array都打印正确,所以数据没有问题。

               vis.on('click', function(){



                var newWindow = window.open('');
                console.log(data[0]);
                console.log(date_array);
                console.log(max_value);
                var vis1 = d3.select(newWindow.document.body),
                    WIDTH = 400,
                    HEIGHT = 150,
                    MARGINS = {
                        top: 10,
                        right: 10,
                        bottom: 10,
                        left: 100
                    },
                    xScale = d3.scale.ordinal().domain(date_array).rangePoints([MARGINS.left, WIDTH - MARGINS.right]),
                    yScale = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([0, max_value]),
                    xAxis = d3.svg.axis()
                    .scale(xScale)

                    yAxis = d3.svg.axis()
                    .scale(yScale);

                vis1.append("svg:g")
                    .attr("class", "x axis")
                    .attr("transform", "translate(0," + (HEIGHT - MARGINS.bottom) + ")")
                    .call(xAxis)


                vis1.append("svg:g")
                    .attr("class", "y axis")
                    .attr("transform", "translate(" + (MARGINS.left) + ",0)")
                    .call(yAxis)

                var lineGen = d3.svg.line()
                    .x(function(d) {
                        return xScale(d.count);
                    })
                    .y(function(d) {
                        return yScale(d.param_perc);
                    })
                    .interpolate("basis");

                vis1.append('svg:path')
                    .attr('d', lineGen(data))
                    .attr('stroke', color)
                    .attr('stroke-width', 2)
                    .attr('fill', 'none')

                     })

最佳答案

为了绘制 svg,您首先需要插入 svg。您的代码将 gpath 附加到 body 中,但缺少包含的 svg 元素。这可以通过添加轻松解决

vis1 = vis1.append("svg");

这对我来说很有效 Plunk .

关于javascript - 使用 d3js 的 onclick 在新选项卡中绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30025015/

相关文章:

javascript - 禁用向上和向下箭头

javascript - 'toggleClass` - 如何在 2 个不同的 `toggle` 名称之间进行 `class`

css - Chrome 和 Opera 中的 SVG 过渡问题

javascript - 将 Force Network 数据保存到 JSON 文件

javascript - 对太宽的下拉菜单项的建议?

javascript - 如何将通用 JavaScript 对象序列化为 XML

javascript - 自动将 SVG 缩放到其父级

Python lxml XPATH——查找特定节点的所有父节点的属性

javascript - 如何在 d3.js 中使矩形成为圆弧/弯曲

javascript - D3js 如何在 .enter 上下文中追加 2 个相同级别的 child