如何使用d3.js聚合数据以生成BarChart

mpgws1up  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(94)

我一直在尝试制作一个条形图,在那里我展示了一个数据集的数据,该数据集有几个年份。我想在X轴上显示年份,在Y轴上显示每一年出现的次数。我一直在Observable上尝试下面的代码,但我不确定为什么它不工作。我试着查了其他的救援人员。文章,但不能成功。

py49o6xq

py49o6xq1#

这里有几个问题,主要是因为您在Observable notebook环境中工作,而不是在普通的JavaScript环境中工作。我认为有必要好好研究一下Learning Observable,以确保您了解基本知识。
特别是,你不能输入:

let x = 1
let y = 2

变成一个细胞这实际上就是你试图在定义图表的主单元格中做的事情,你得到了一个语法错误。你可以做的是输入:

x = 1

一个细胞,然后

y = 2

另一间牢房然后,您可以在其他单元格中引用这些值。
您还可以组合合并,如:

x_plus_y = {
  let x = 1;
  let y = 2;
  return x+y;
}

然后,x_plus_y的值将可用于其他单元格。
现在,我想你是想用https://think.cs.vt.edu/corgis/csv/astronauts/来创建一个按年计算的宇航员任务。
假设是这样,this Observable Notebook展示了实现这一点的几种方法。
最后,我认为使用BarChart组件是错误的。该组件实际上是他们更完整、更高级别的绘图库Observable Plot的实验性垫脚石。我认为这是更容易得到你想要的情节和你有更多的控制。它也很容易在一个普通的环境中使用Plot,像这样:

let div = d3.select('#plot')
fetch(
  "https://think.cs.vt.edu/corgis/datasets/csv/astronauts/astronauts.csv"
).then(async function (r) {
  let astronauts = d3.csvParse(await r.text(), d3.autoType);
  div.append(() => Plot.plot({
    y: {
      grid: true
    },
    x: { tickFormat: (y) => (y % 10 == 0 ? d3.format('d')(y) : "") },
    marks: [
      Plot.barY(astronauts, Plot.groupX({ y: "count" }, { x: "Mission.Year" })),
      Plot.ruleY([0])
    ]
  }))
});
<script src="https://cdn.jsdelivr.net/npm/d3@7"></script>
<script src="https://cdn.jsdelivr.net/npm/@observablehq/[email protected]"></script>
<div id="plot"></div>

相关问题