【问题标题】:d3 line graph - how to start line to the right of Y axis?d3折线图 - 如何从Y轴右侧开始线?
【发布时间】:2019-03-25 14:04:07
【问题描述】:

我有一个带有代表 X 轴的日期的折线图。而不是我的线从 Y 轴开始,我想将它稍微向右移动,以便它更具可读性。如果可能的话,我还想在我的 X 轴刻度列表中添加一个日期。所以基本上,如果我有一个包含 5 个日期的数组,例如:

{'2018 年 3 月 19 日'、'2018 年 4 月 24 日'、'2018 年 5 月 19 日'、'2018 年 6 月 4 日'、'2018 年 7 月 6 日'}

我希望 2018 年 3 月 19 日不直接显示在 X 轴 = 0 上。但是,我仍然希望在 X 轴 = 0 上有一个刻度值,例如我数组中的第一个日期减一个月。这有意义吗?这是用 d3 可以轻松完成的事情吗?

const circleLabelDrawDuration = 700;
const minDate = data[0].pullDate.setMonth(data[0].pullDate.getMonth() - 4);
const maxDate = data[data.length - 1].pullDate;

const xAxis = d3.scaleTime().domain([minDate, maxDate]).range([0, width]);

svg.append('g').call(d3.axisBottom(xAxis).ticks(pullDates.length).tickValues(pullDates).tickFormat(d3.timeFormat("%b %Y")))
.attr('transform', `translate(0,${height})`).selectAll('text')
.style('text-anchor', 'end').attr('dx', '-.8em').attr('dy', '-.15em').attr('transform', 'rotate(-50)');

【问题讨论】:

    标签: javascript d3.js linechart


    【解决方案1】:

    在设置您的 x 域时,我会执行以下操作。我发现偏移量非常有用。使用一些 d3 函数使其更容易。

    const monthInMs = 2.628e+9 // this is 1 month in ms
    const xMin = +d3.min(dataArray, (d) => d.timestamp) - monthInMs;
    const xMax = +d3.max(dataArray, (d) => d.timestamp) + monthInMs;
    xScale.domain([xMin, xMax]);
    

    我在 d3.min 前面添加了+ 以确保返回值是数字而不是日期对象。我同时给出了最小值和最大值,这样你就可以在两边都有一些填充,但你只需要使用你想要的。

    【讨论】:

    • 感谢 pmkro 的回复。所有这一切似乎都是改变我的初始值。它不会改变我的路线。我会用我所拥有的更新我的帖子。
    • 我不太清楚你的意思。偏移轴域应该只更新轴并将您的线从 y 轴偏移。你能在你的问题中添加一个小sn-p吗?查看更多代码会有所帮助。 @TheVanillaThrilla
    • 我在附加轴的地方添加了。你有什么特别想看的代码部分吗?
    • 我希望得到一个可视化,这样我就可以确切地看到你所说的“不改变我的路线”是什么意思。您是否希望线路也通过 0?小心data[0].pullDate.setMonth(data[0].pullDate.getMonth() - 4),因为它可能会改变 data[0].pullDate
    • 你是对的,它改变了我的数组并弄乱了我的滴答声。感谢您的帮助@pmkro。很抱歉,我现在才接受这个。
    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多