为了账号安全,请及时绑定邮箱和手机立即绑定

d3.js 图表不考虑边距

d3.js 图表不考虑边距

森林海 2023-10-04 15:31:20
所以我在这里定义边距:  const svg1 = d3.select(graphElement1.current);  const margin = {top: 0, right: 30, bottom: 10, left: 10};  const width = 650 - margin.left - margin.right;  const height = 100 - margin.top - margin.bottom;在这里绘制图表    const data = timeseries;    const x = d3.scaleTime()        .domain(d3.extent(data, function(d) {          return new Date(d['date']+'2020');        }))        .range([0, width]);    const y = d3.scaleLinear()        .domain([0, d3.max(data, function(d) {          return +d['totalconfirmed'];        })])        .range([height, 0]);    svg1.append('g')        .attr('transform', 'translate(0,' + height + ')')        .attr('class', 'axis')        .call(d3.axisBottom(x));svg1.append('path')        .datum(data)        .attr('fill', 'none')        .attr('stroke', '#ff073a99')        .attr('stroke-width', 5)        .attr('cursor', 'pointer')        .attr('d', d3.line()            .x(function(d) {              return x(new Date(d['date']+'2020'));            })            .y(function(d) {              return y(d['totalconfirmed'])-5;            })            .curve(d3.curveCardinal),        );    svg1.selectAll('.dot')        .data(data)        .enter()        .append('circle')        .attr('fill', '#ff073a')        .attr('stroke', '#ff073a')        .attr('r', 3)        .attr('cursor', 'pointer')        .attr('cx', function(d) {          return x(new Date(d['date']+'2020'));        })        .attr('cy', function(d) {          return y(d['totalconfirmed'])-5;        })        .on('mouseover', (d, i) => {          d3.select(d3.event.target).attr('r', '5');          setDatapoint(d);          setIndex(i);        })        .on('mouseout', (d) => {          d3.select(d3.event.target).attr('r', '3');        });我已经尝试了很多 CSS 规则来允许 svg 尊重边距定义,但我似乎无法使其工作。结果我也无法显示 x 轴。这就是现在的样子,右边距有效,但是,
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

解释的:

这些边距将用于插入我们的比例范围。范围的起点和终点向内移动相应的边距,而不是从 0 延伸到图表的整个宽度和高度。

因此,对于x轴刻度,替换.range([0, width])为:

.range([margin.left, width])

类似地,对于y轴,请尝试以下范围定义:

.range([height, margin.top])


查看完整回答
反对 回复 2023-10-04
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信