D3 条形图。如何根据 JSON 数据设置自定义 x 和 y 轴?

赛阿里夫 |

例如,我有一个如下所示的 JSON 数据:

[
{
    "Letter": "A",
    "Freq": 20,
    "Font" : 123
},
{
    "Letter" : "B",
    "Freq": 12,
    "Font" : 123
},
{
    "Letter" : "C",
    "Freq": 47,
    "Font" : 123
},
{
    "Letter" : "D",
    "Freq": 34,
    "Font" : 123
}]

然后我有两种输入类型来设置轴。

在此处输入图片说明

如何绘制条形图以反映所选属性?

这是我到目前为止所拥有的。

    var xname = document.getElementById("xvalue").value;
    var yname = document.getElementById("yvalue").value;
    var jsObjects = document.getElementById("jstextarea").value;
    jsObjectsArray = eval(jsObjects);


    x.domain(jsObjectsArray.map(function (jsObjectsArray) {
        return Object.values(jsObjectsArray)[0];
    }));
    y.domain([0, d3.max(jsObjectsArray, function (jsObjectsArray) {
        return Object.values(jsObjectsArray)[1];
    })]);
    chart.select('.x.axis').transition().duration(300).call(xAxis);
    chart.select(".y.axis").transition().duration(300).call(yAxis);
    chart.data(jsObjectsArray);
    chart.select("#xAxistext").text(function (jsObjectsArray) {
        return xname || Object.keys(jsObjectsArray)[0];
    });

    chart.select("#yAxistext").text(function (jsObjectsArray) {
        return yname || Object.keys(jsObjectsArray)[1];
    });

    chart.selectAll("#sampledata").remove();
    chart.selectAll(".label").remove();
    var bars = chart.selectAll(".bar").data(jsObjectsArray);

    bars.enter().append("rect")
        .attr("x", function (jsObjectsArray) {
            return x(Object.values(jsObjectsArray)[0]);
        })
        .attr("y", function (jsObjectsArray) {
            return y(Object.values(jsObjectsArray)[1]);
        })
        .attr("height", function (jsObjectsArray) {
            return height - y(Object.values(jsObjectsArray)[1]);
        })
        .attr("width", x.rangeBand())
        .attr("class", "bar")
        .style("fill", function (jsObjectsArray, i) {
            return color(i);
        })
        .style("color", function () {
            return '#FFFFFF';
        })
        .on("mousemove", function (jsObjectsArray) {
            tooltip
                .style("left", d3.event.pageX - 50 + "px")
                .style("top", d3.event.pageY - 70 + "px")
                .style("display", "inline-block")
                .html((Object.values(jsObjectsArray)[0]) + "<br>" + (Object.values(jsObjectsArray)[1]));
        })
        .on("mouseout", function (jsObjectsArray) {
            tooltip.style("display", "none");
        })
        .attr("data-legend", function (jsObjectsArray) {
            return Object.values(jsObjectsArray)[0]
        });


    var texts = chart.selectAll(".label")
        .data(jsObjectsArray);

    texts.enter()
        .append("text")
        .attr("class", "label");

    texts.attr("x", (function (jsObjectsArray) {
        return x(Object.values(jsObjectsArray)[0]) + 76;
    }))
        .attr("y", (function (jsObjectsArray) {
            return y(Object.values(jsObjectsArray)[1]) - 20;
        }))
        .attr("dy", ".75em")
        .text(function (jsObjectsArray) {
            return Object.values(jsObjectsArray)[1];
        });

    chart.select("#dataLegend").call(d3.legend);

如您所见,我只是将其硬编码到 JSON 数组的第一个和第二个位置。如何选择哪个属性来设置轴及其值?

rioV8

您必须在使用数据集之前对其进行转换

var xname = document.getElementById("xvalue").value;
var yname = document.getElementById("yvalue").value;
var jsObjects = document.getElementById("jstextarea").value;
jsObjectsArray = eval(jsObjects);
jsObjectsArray = jsObjectsArray.map( function (d) { return {key:d[xname], value:d[yname] }; });

使用后d作为函数的参数和使用d.keyd.value喜欢。jsObjectsArray为每个参数使用as name 是令人困惑的。

bars.enter().append("rect")
    .attr("x", function (d) { return x(d.key); })
    .attr("y", function (d) { return y(d.value); })
    .attr("height", function (d) { return height - y(d.value); })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有自定义x轴和条形宽度的d3条形图

来自分类Dev

D3条形图无法正确动态更新y轴和x轴

来自分类Dev

x轴上的自定义D3`tickValue`-水平条形图

来自分类Dev

堆叠的条形图交换x轴和y轴

来自分类Dev

交换X和Y轴表-条形图

来自分类Dev

如何设置条形图的x轴

来自分类Dev

如何设置条形图的x轴

来自分类Dev

如何创建堆积的折线图D3,多个Y轴和公共X轴

来自分类Dev

如何使用D3轴命令正确地换位X和Y轴?

来自分类Dev

如何在d3中的分组条形图数据的右侧显示第二个y轴

来自分类Dev

如何使用matplotlib.pyplot在x轴上创建分组的条形图(按月和年),在y轴上创建值的条形图?

来自分类Dev

如何在nvd3中的Y轴上设置自定义刻度和标签

来自分类Dev

d3.js条形图排序:无法确定如何对x轴标签和条形进行排序

来自分类Dev

带有两个 Y 轴和公共 X 轴的 Matplotlib 条形图

来自分类Dev

根据X轴数据范围生成R条形图

来自分类Dev

d3 v4为什么我的x轴和条形图不能对齐?

来自分类Dev

条形图 - 自定义 y 轴

来自分类Dev

D3分组条形图:如何旋转x轴刻度线的文本?

来自分类Dev

如何在 d3 中绘制镜像 x 轴(倒置)条形图?

来自分类Dev

如何在c3 js中自定义条形图的y轴以显示自定义百分比刻度

来自分类Dev

如何在c3 js中自定义条形图的y轴以显示自定义百分比刻度

来自分类Dev

3 y轴值的条形图

来自分类Dev

无法使D3 y轴和列沿x轴正确对齐

来自分类Dev

如何在R中使用x,y数据绘制条形图和误差线

来自分类Dev

如何生成列名称沿X轴,行沿Y轴的条形图?

来自分类Dev

适当缩放比例(Y轴,X轴)的图的D3缩放问题

来自分类Dev

D3多轴条形图和线性图

来自分类Dev

D3:根据x轴的值在y轴上添加类别以打勾

来自分类Dev

D3:根据x轴的值在y轴上添加类别以打勾

Related 相关文章

  1. 1

    带有自定义x轴和条形宽度的d3条形图

  2. 2

    D3条形图无法正确动态更新y轴和x轴

  3. 3

    x轴上的自定义D3`tickValue`-水平条形图

  4. 4

    堆叠的条形图交换x轴和y轴

  5. 5

    交换X和Y轴表-条形图

  6. 6

    如何设置条形图的x轴

  7. 7

    如何设置条形图的x轴

  8. 8

    如何创建堆积的折线图D3,多个Y轴和公共X轴

  9. 9

    如何使用D3轴命令正确地换位X和Y轴?

  10. 10

    如何在d3中的分组条形图数据的右侧显示第二个y轴

  11. 11

    如何使用matplotlib.pyplot在x轴上创建分组的条形图(按月和年),在y轴上创建值的条形图?

  12. 12

    如何在nvd3中的Y轴上设置自定义刻度和标签

  13. 13

    d3.js条形图排序:无法确定如何对x轴标签和条形进行排序

  14. 14

    带有两个 Y 轴和公共 X 轴的 Matplotlib 条形图

  15. 15

    根据X轴数据范围生成R条形图

  16. 16

    d3 v4为什么我的x轴和条形图不能对齐?

  17. 17

    条形图 - 自定义 y 轴

  18. 18

    D3分组条形图:如何旋转x轴刻度线的文本?

  19. 19

    如何在 d3 中绘制镜像 x 轴(倒置)条形图?

  20. 20

    如何在c3 js中自定义条形图的y轴以显示自定义百分比刻度

  21. 21

    如何在c3 js中自定义条形图的y轴以显示自定义百分比刻度

  22. 22

    3 y轴值的条形图

  23. 23

    无法使D3 y轴和列沿x轴正确对齐

  24. 24

    如何在R中使用x,y数据绘制条形图和误差线

  25. 25

    如何生成列名称沿X轴,行沿Y轴的条形图?

  26. 26

    适当缩放比例(Y轴,X轴)的图的D3缩放问题

  27. 27

    D3多轴条形图和线性图

  28. 28

    D3:根据x轴的值在y轴上添加类别以打勾

  29. 29

    D3:根据x轴的值在y轴上添加类别以打勾

热门标签

归档