D3.js d3js打印未定义的线形图不可修改

D3.js d3js打印未定义的线形图不可修改,d3.js,linechart,D3.js,Linechart,我正在学习d3js,我需要帮助创建折线图。我相当成功地绘制了简单的对象和条形图。折线图似乎是一座很难攀登的陡坡 const数据=[{ “第1行”:[ 10, 11, 12, 15 ] }, { “第2行”:[ 21, 22, 23, 32 ] }, { “第3行”:[ 11, 12, 13, 15 ] } ] //设置图形的尺寸和边距 var保证金={ 前50名, 右:100,, 底数:130, 左:120 }, 宽度=900-边距。左侧-边距。右侧, 高度=400-margin.top-ma

我正在学习d3js,我需要帮助创建折线图。我相当成功地绘制了简单的对象和条形图。折线图似乎是一座很难攀登的陡坡

const数据=[{
“第1行”:[
10,
11,
12,
15
]
},
{
“第2行”:[
21,
22,
23,
32
]
},
{
“第3行”:[
11,
12,
13,
15
]
}
]
//设置图形的尺寸和边距
var保证金={
前50名,
右:100,,
底数:130,
左:120
},
宽度=900-边距。左侧-边距。右侧,
高度=400-margin.top-margin.bottom;
//将svg对象附加到页面主体
var svg=d3。选择(“ca”)
.append(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“transform”,`translate(${margin.left},${margin.top})`);
//添加X轴
var x=d3.scaleLinear()
.域(d3.范围(数据,(d)=>d.长度))
.范围([0,宽度]);
svg.append(“g”)
.attr(“变换”、“平移(0)”、“高度+”)
.call(d3.x.ticks(5));
//添加Y轴
//我需要这方面的帮助,如何在域中设置最小值和最大值?
变量y=d3.scaleLinear()
.domain([0,d3.max(数据,(d)=>d.values)])
.范围([高度,0]);
svg.append(“g”)
.调用(d3.左(y));
//划清界限
//我需要在这方面的帮助,我如何才能得到绘制的线,js给出了这个错误!
svg.selectAll(“.line”)
.数据(数据)
.输入()
.append(“路径”)
.attr(“填充”、“无”)
.attr(“笔划”、“黑色”)
.attr(“笔划宽度”,1.5)
.attr(“d”,(d)=>{
控制台日志(d)
var k=d3.line()
.x((d)=>x(d))
.y((d)=>y(d))
(d)价值观;
控制台日志(k);
返回k;
});

我已经让您的示例发挥了作用,但这里有几件事您需要知道:

  • 你的数据结构非常混乱。如果要将对象数组作为数据,请确保所有对象都具有相同的键。如果您使用
    [{y:[…]},{y:[…]}]
    ,这没关系,但是
    [{LINE1:[…]},{LINE2:[…]}]
    很难使用。我将您的数据更改为更像
    […]、[…]、[…]]
    的结构

  • 不要为每行创建单独的
    d3.line
    ,只需创建一次并调用它即可。它是一个行工厂,这意味着它是一个函数,调用时返回一行。如果它没有被共享,它可能会使用不同的域和范围,这使得图表很难甚至是无用的

  • 如果函数中的第一个参数是
    d
    ,第二个参数是
    i
    ,数组中节点的索引。在这种情况下,您可以从
    x=0
    开始,然后转到
    x=3
    。您使用
    d
    尝试获取该值

  • 请记住数据的结构。您一直想访问
    d.values
    ,但这根本不存在

  • const data=Object.values({
    “第1行”:[
    10,
    11,
    12,
    15
    ],
    “第2行”:[
    21,
    22,
    23,
    32
    ],
    “第3行”:[
    11,
    12,
    13,
    15
    ]
    });
    var line=d3.line()
    .x((d,i)=>x(i))
    .y((d)=>y(d));
    //设置图形的尺寸和边距
    var保证金={
    前50名,
    右:100,,
    底数:130,
    左:120
    },
    宽度=900-边距。左侧-边距。右侧,
    高度=400-margin.top-margin.bottom;
    //将svg对象附加到页面主体
    var svg=d3。选择(“ca”)
    .append(“svg”)
    .attr(“宽度”,宽度+边距。左侧+边距。右侧)
    .attr(“高度”,高度+边距。顶部+边距。底部)
    .附加(“g”)
    .attr(“transform”,`translate(${margin.left},${margin.top})`);
    //添加X轴
    var x=d3.scaleLinear()
    .domain([0,d3.max(数据,(d)=>d.length)])
    .范围([0,宽度]);
    svg.append(“g”)
    .attr(“变换”、“平移(0)”、“高度+”)
    .call(d3.x.ticks(5));
    //添加Y轴
    //我需要这方面的帮助,如何在域中设置最小值和最大值?
    变量y=d3.scaleLinear()
    .domain([0,d3.max(数据,(d)=>Math.max(…d)))
    .范围([高度,0]);
    svg.append(“g”)
    .调用(d3.左(y));
    //划清界限
    //我需要在这方面的帮助,我如何才能得到绘制的线,js给出了这个错误!
    svg.selectAll(“.line”)
    .数据(数据)
    .输入()
    .append(“路径”)
    .attr(“填充”、“无”)
    .attr(“笔划”、“黑色”)
    .attr(“笔划宽度”,1.5)
    .attr(“d”,(d)=>第(d)行)