D3.js 使用d3js的直方图

D3.js 使用d3js的直方图,d3.js,charts,histogram,D3.js,Charts,Histogram,我正在尝试创建一个收入范围的柱状图,每一个收入范围都有统计数字。我从基本直方图bl.ocks中选取了一个示例。下面是代码。我如何生成直方图来显示x轴上的收入范围和y轴上的收入范围 var保证金={ 前30名, 右:20,, 底数:30, 左:50 }; 变量宽度=600-margin.left-margin.right; 变量高度=270-margin.top-margin.bottom; var svg=d3.选择(“主体”) .append(“svg”) .attr(“宽度”,宽度+边距

我正在尝试创建一个收入范围的柱状图,每一个收入范围都有统计数字。我从基本直方图bl.ocks中选取了一个示例。下面是代码。我如何生成直方图来显示x轴上的收入范围和y轴上的收入范围

var保证金={
前30名,
右:20,,
底数:30,
左:50
};
变量宽度=600-margin.left-margin.right;
变量高度=270-margin.top-margin.bottom;
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
//获取数据
var all=[{
“名称”:“家庭价值”,
“代码”:“主值”,
“儿童”:[{
“名称”:“房屋价值低于10000美元”,
“代码”:“Q084002”,
“计数”:78
}, {
“名称”:“房屋价值$10000至$14999”,
“代码”:“Q084003”,
“计数”:73
}, {
“名称”:“房屋价值15000至19999美元”,
“代码”:“Q084004”,
“计数”:30
}, {
“名称”:“房屋价值20000至25000美元”,
“代码”:“Q084005”,
“计数”:60
}, {
“名称”:“房屋价值25000至29999美元”,
“代码”:“Q084006”,
“计数”:40
}, {
“名称”:“房屋价值30000至34999美元”,
“代码”:“Q084007”,
“计数”:21
}, {
“名称”:“房屋价值35000美元至39999美元”,
“代码”:“Q084008”,
“计数”:8
}, {
“名称”:“房屋价值$40000至$49999”,
“代码”:“Q084009”,
“计数”:44
}, {
“名称”:“房屋价值50000至59999美元”,
“代码”:“Q084010”,
“计数”:85
}, {
“名称”:“房屋价值60000至69999美元”,
“代码”:“Q084011”,
“计数”:93
}, {
“名称”:“房屋价值$70000至$79999”,
“代码”:“Q084012”,
“计数”:208
}, {
“名称”:“房屋价值80000至89999美元”,
“代码”:“Q084013”,
“计数”:231
}, {
“名称”:“房屋价值90000至99999美元”,
“代码”:“Q084014”,
“计数”:419
}, {
“名称”:“房屋价值10万至124999美元”,
“代码”:“Q084015”,
“计数”:1491
}, {
“名称”:“房屋价值$125000至$149999”,
“代码”:“Q084016”,
“计数”:1135
}, {
“名称”:“房屋价值$150000至$174999”,
“代码”:“Q084017”,
“计数”:866
}, {
“名称”:“房屋价值$175000至$199999”,
“代码”:“Q084018”,
“计数”:472
}, {
“名称”:“房屋价值$200000至$249999”,
“代码”:“Q084019”,
“计数”:654
}, {
“名称”:“房屋价值$250000至$299999”,
“代码”:“Q084020”,
“计数”:536
}, {
“名称”:“房屋价值300000至399999美元”,
“代码”:“Q084021”,
“计数”:409
}, {
“名称”:“房屋价值$400000至$499999”,
“代码”:“Q084022”,
“计数”:145
}, {
“名称”:“房屋价值50万至749999美元”,
“代码”:“Q084023”,
“计数”:147
}, {
“名称”:“房屋价值$750000至$999999”,
“代码”:“Q084024”,
“计数”:128
}]
}]
var data=all[0]。子项;
data.forEach(函数(d){
d、 name=+d.name;
d、 计数=+d.count;
});
var x=d3.scaleLinear()
.rangeRound([0,宽度]);
变量y=d3.scaleLinear()
.domain([0,d3.max(容器,函数(d)){
返回d.count;
})])
.范围([高度,0]);
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
var x=d3.scaleLinear()
.rangeRound([0,宽度]);
var bins=d3.直方图()
.domain(x.domain())
.阈值(x.ticks(20))
(数据);
变量y=d3.scaleLinear()
.domain([0,d3.max(容器,函数(d)){
返回d.count;
})])
.范围([高度,0]);
//强制类型。
data.forEach(函数(bin){
bin.name=+bin.name;
bin.count=+bin.count;
});
//将每个料仓规格化为,使高度=数量/宽度;
//看http://en.wikipedia.org/wiki/Histogram#Examples
对于(变量i=1,n=bin.length,bin;i

您的问题/代码是对条形图和柱状图的误解。别难过,很多人都错了

正如我在中所说:条形图,就其本质而言,是由表示分类变量的条形图组成的。这意味着条形图位于表示分类变量的标签上,即定性变量。当我说“很多人都弄错了”时,我说的是条形图和柱状图之间的区别:两者都使用矩形来编码数据,但在柱状图中,与条形图不同的是,标签代表一个定量变量。一个月至少有五六次,我在S.O.看到有人发帖询问柱状图(实际上是柱状图),或者柱状图(实际上是柱状图)

回到你的问题:你的数据不适合做柱状图。正如我所说的,历史记录
[{
  value: 200000,
  code: "Q084001"
}, {
  value: 250000,
  code: "Q084002"
}, {
  value: 180000,
  code: "Q084003"
}, {
  value: 490000,
  code: "Q084001"
},
//etc...
]
["Housing Value Under $10,000", 
  "Housing Value $10,000 to $14,999", 
  "Housing Value $15,000 to $19,999", 
  //etc...
];