当前位置: 首页 > 面试题库 >

使用新的data.json更新d3饼图

闻人修明
2023-03-14
问题内容

我有一个动态数据源,它经常在浏览器中创建一个新的json。

我能够使用下面的代码从这个json创建饼图(也在这个小提琴中)

var data=[{"crimeType":"mip","totalCrimes":24},{"crimeType":"theft","totalCrimes":558},{"crimeType":"drugs","totalCrimes":81},{"crimeType":"arson","totalCrimes":3},{"crimeType":"assault","totalCrimes":80},{"crimeType":"burglary","totalCrimes":49},{"crimeType":"disorderlyConduct","totalCrimes":63},{"crimeType":"mischief","totalCrimes":189},{"crimeType":"dui","totalCrimes":107},{"crimeType":"resistingArrest","totalCrimes":11},{"crimeType":"sexCrimes","totalCrimes":24},{"crimeType":"other","totalCrimes":58}];


var width = 800,
height = 250,
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(radius - 70);

var pie = d3.layout.pie()
.sort(null)
.value(function (d) {
return d.totalCrimes;
});



var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

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.crimeType);
});

g.append("text")
    .attr("transform", function (d) {
    return "translate(" + arc.centroid(d) + ")";
})
    .attr("dy", ".35em")
    .style("text-anchor", "middle")
    .text(function (d) {
    return d.data.crimeType;
});

此数据经常更新,那么更新饼图的最佳方法是什么?看看这个小提琴。在这里,我还有另一个名为data2的json。

我怎样才能简单地用data2替换数据并使饼动画化/更新?

注意:在某些更新中,值可能== 0


问题答案:

我已经创建了一个有效的版本,并将其发布在这里:http
:
//www.ninjaPixel.io/StackOverflow/doughnutTransition.html(由于某些原因,我无法获得在小提琴演奏中的过渡效果,因此将其发布到我的网站来代替)。

为了使代码更清晰,我省略了您的标签,将“ data”重命名为“
data1”,并且卡在某些单选按钮中以在数据数组之间切换。以下代码片段显示了重要的位。您可以从上面的我的页面中获取完整的代码。

var svg = d3.select("#chartDiv").append("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("id", "pieChart")
    .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

var path = svg.selectAll("path")
    .data(pie(data1))
    .enter()
    .append("path");

  path.transition()
      .duration(500)
      .attr("fill", function(d, i) { return color(d.data.crimeType); })
      .attr("d", arc)
      .each(function(d) { this._current = d; }); // store the initial angles


function change(data){
    path.data(pie(data));
    path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs

}

// Store the displayed angles in _current.
// Then, interpolate from _current to the new angles.
// During the transition, _current is updated in-place by d3.interpolate.
function arcTween(a) {
  var i = d3.interpolate(this._current, a);
  this._current = i(0);
  return function(t) {
    return arc(i(t));
  };
}

您可能会发现Mike
Bostock的这段代码很有帮助,这是我学习如何做到的地方。



 类似资料:
  • 问题内容: 我学到了几个区块。我已经借助jquery做出了响应式d3直方图。 现在,我想在使用ajax更新d3图表方面走得更远。 我刚进入jQuery。 并了解ajax的工作原理。 搜索了很长时间,但在官方d3网站或其他任何地方都找不到任何有效的示例。 任何帮助对我来说都是有益的,让我掌握了通过Ajax更新d3图表的基本功能。 提前致谢!! 问题答案: 您只需在ajax成功中调用d3函数:

  • 问题内容: 使用D3库将SVG元素置于z顺序顶部的有效方法是什么? 我的特定情况是一个饼图其中突出(通过添加到)当鼠标在给定的片。生成我的图表的代码块如下: 我已经尝试了几种选择,但到目前为止还没有运气。同时使用和调用均无效。 在我的CSS中,“ top”类的定义如下: 该语句可以确保我知道它正确打开/关闭。它是。 我听说过使用是一个选项,但是我不清楚如何将“ selected”元素置于顶部。 更

  • 嗨,我正在使用chartnewjs。我想用动画更新饼图。我使用的折线图与实时更新。updateChart(ctx, data, config, true, true)方法工作正常。我已经尝试了同样的饼图,但图表没有更新。 然后我像每次刷新一样尝试创建新图表(document.getElementById(“peak_session”).getContext(“2d”)).Pie(数据,选项)它工作

  • 我痛苦了3天。我正在使用兼容性库中的视图分页程序。我已经成功地让它显示了几个视图。我的问题是,当我交换视图时,不会在它的回收器视图中按片段更新数据。但当我关闭应用程序时,打开碎片会按回收器视图显示更新内容。我使用了所有方法,如setnotifydatachanged()和许多其他方法,但viewpager中的片段不更新内容。感谢所有的帮助,这是我的主要活动

  • 我在Elasticsearch中索引了一个文档,如下所示: 我尝试通过以下命令更新计数字段: 但是,我收到了以下错误: 我到底做了什么,却不见了?我在http://www.elasticsearch.org/guide/reference/api/update.html跟踪文件,但它不起作用。 此外,我还包括父字段: 但还是没有成功。有人能帮我解决这个错误吗?

  • 当你在gitbook.com上创建了书本后,你需要推送一些内容给它。你可以使用网页编辑器或者命令行来做这件事。 如果你想要通过命令行来更新你的书本的话,你可以使用 GIT 来推送你的内容。 GIT Url 每本书本都有一个相关联的Git HTTPS url。GitBook的git服务器暂时还不支持ssh协议。 git url的格式是: https://git.gitbook.com/{{UserN