从csv加载数据,但以不同的方式表示数据D3-水平堆叠条

从csv加载数据,但以不同的方式表示数据D3-水平堆叠条,csv,d3.js,Csv,D3.js,我正在努力取得一些成就,但我不知道如何实现它 我在data.csv文件中有一个示例数据,如下所示: State,p1,p2,p3,p4,p5,p6,p7 AL,0.5,0.5,0.5,1,1,1,1,1,1 AK,1,1,1,1,1,1,1,1,1 现在,每个数据值是100。这看起来不错,但如果我更改了值,我的条形图也会更改,需要将其固定(x轴应始终为0-7),因为在这种情况下,它表示一周的数据 我不希望图表依赖于数据的原因是,数据将仅用于颜色表示,而不用于宽度。所以,如果值在80-100之间

我正在努力取得一些成就,但我不知道如何实现它

我在data.csv文件中有一个示例数据,如下所示:

State,p1,p2,p3,p4,p5,p6,p7
AL,0.5,0.5,0.5,1,1,1,1,1,1
AK,1,1,1,1,1,1,1,1,1
现在,每个数据值是100。这看起来不错,但如果我更改了值,我的条形图也会更改,需要将其固定(x轴应始终为0-7),因为在这种情况下,它表示一周的数据

我不希望图表依赖于数据的原因是,数据将仅用于颜色表示,而不用于宽度。所以,如果值在80-100之间,则将其涂成绿色。但我以后会弄明白的

我在Highcharts中获得了期望的结果,但我更喜欢D3

我在这里用Highcharts做的,我想得到这样的东西:

在阅读了r之后,我为我的案例实现了相同的代码:来自@mbostock

谢谢你的帮助

以下是我的解决方案:

首先,因为这里最重要的事情是根据值为条形图着色,所以使用阈值刻度:

var color = d3.scale.threshold()
    .domain([0.25, 0.75])
    .range(['green', 'yellow', 'red']);
在本例中,如果该值小于0.25,则该条为绿色,介于0.25和0.75之间,该条为黄色,超过0.75时,该条为红色。无论如何,这只是一个例子,让你得到的想法,改变领域和范围的方式,你想要的

之后,将值放入
ages
数组:

data.forEach(function(d) {
    var y0 = 0;
    d.ages = agesDomain.map(function(name) {
        return {
            name: name,
            value: d[name],
            y0: y0,
            y1: y0 += +d[name]
        };
    });
    d.total = d.ages[d.ages.length - 1].y1;
});
最后,将所有条设置为相同的宽度,并按以下值为其上色:

state.selectAll("rect")
    .data(function(d) {
        return d.ages;
    })
    .enter().append("rect")
    .attr("height", y.rangeBand())
    .attr("x", function(d, i) {
        return x(i);
    })
    .attr("width", x(1))
    .style("fill", function(d) {
        return color(d.value);
    });

这是您的问题,我更改了数据只是为了使图表更加多样化:

我认为这是数据验证的经典问题。我可以在csv文件中输入我想要的任何值,但是代码应该决定该值是有效的还是在范围内。因此,您从csv获取数据,然后检查x轴的值是否在1到7之间。如果较低,则将其设置为1;如果较大,则将其设置为7。如果在1和7之间,则使用该值。就这么简单,谢谢你,弗拉德。我还是D3的新手,所以我不知道该把代码放在哪里。你说的完全有道理。这正是我需要的。我用data.forEach编写了一堆if语句,但它看起来太难看了。但它是有效的。你的问题是什么?我想我解决了它,但它看起来相当愚蠢。我希望直观地表示数据值,因为它们都是相同的,尽管它们不是。所以,若数据值为0.5,在图表上表示为1。如果数据值为0.2,则表示为1。我是通过在csv()callback.Gerardo中编写if-else语句得到的。。。你让我高兴极了!非常感谢你!!!这正是我需要的!!!!我真是太感谢你了@Nikki,因为你是S.O.的新人:说“谢谢”的最好方式就是接受答案,谢谢!我还不能投票,但我接受了答案。再次感谢您编辑我的问题!我很感激!