javascript - D3.js 在线图上的一条线后面添加一个阴影时间范围区域

标签 javascript d3.js charts linegraph

我正在使用 D3.js (v4) 创建一个简单的折线图,如下所示:

Simple Line Graph

这是 fiddle

我想添加第二个数据集,该数据集显示在线后面的阴影时间范围区域。

数据看起来像这样:

RangeStart: 31-Mar-18
RangeEnd: 16-Apr-18
Label: "Golden Period"
Color: "#3cfb34"
  • RangeStart 表示图形上阴影区域的起点。
  • RangeEnd 表示图形上阴影区域的末端。
  • 标签是显示在阴影区域顶部的文本
  • 颜色是阴影区域的颜色

图表会像这样输出阴影区域(带有标签):

Simple Line Graph with Shaded Timeframe Region

我怎样才能完成这样的事情?

非常感谢您的帮助!

最佳答案

您可以在添加行之前添加一个矩形和一个文本:

// ADD TIMEFRAME
var timeframe = {
    RangeStart: parseDate('31-Mar-18'),
    RangeEnd: parseDate('16-Apr-18'),
    Label: "Golden Period",
    Color: "#3cfb34"
};

var gTimeframe = svg.append("g").attr("class", "timeframe");

gTimeframe.append("rect")
    .attr("x", x(timeframe.RangeStart))
    .attr("y", 0)
    .attr("width", x(timeframe.RangeEnd) - x(timeframe.RangeStart))
    .attr("height", height)
    .style("fill", timeframe.Color);

gTimeframe.append("text")
    .attr("x", x(timeframe.RangeStart) + 5)
    .attr("y", 15)
    .text(timeframe.Label);
// END TIMEFRAME

Updated Fiddle .

如果您需要添加多个时间帧,将它们存储在一个数组中,并像这样使用 D3 数据绑定(bind):

// ADD TIMEFRAME
var timeframes = [
  {
    RangeStart: parseDate('31-Mar-18'),
    RangeEnd: parseDate('16-Apr-18'),
    Label: "Golden Period",
    Color: "#3cfb34"
  },
  {
    RangeStart: parseDate('20-Apr-18'),
    RangeEnd: parseDate('3-May-18'),
    Label: "Other Period",
    Color: "steelblue"
  },
];

var gTimeframes = svg
    .selectAll("g.timeframe")
  .data(timeframes).enter()
    .append("g").attr("class", "timeframe");

gTimeframes.append("rect")
    .attr("x", function(d) { return x(d.RangeStart); })
    .attr("y", 0)
    .attr("width", function(d) { return x(d.RangeEnd) - x(d.RangeStart); })
    .attr("height", height)
    .style("fill", function(d) { return d.Color; });

gTimeframes.append("text")
    .attr("x", function(d) { return x(d.RangeStart) + 5; })
    .attr("y", 15)
    .text(function(d) { return d.Label; });

JSFiddle

关于javascript - D3.js 在线图上的一条线后面添加一个阴影时间范围区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50304089/

相关文章:

jquery - 多系列条形图显示为堆栈条,而不是并排显示系列

javascript - 使用图表js创建两个内联图表

javascript - 在 d3.js 中合并数据

javascript - 获取 d3 中元素的属性并不优雅

javascript - d3 森伯斯特硬编码数据

javascript - D3.v3 刷怪行为

android - Android 中的错误 "Dataset and renderer should be not null and should have the same number of series"

javascript - 在 JavaScript 中分割字符串

javascript - 在选中隐藏形式的所有复选框时更改 div 颜色

javascript - knockout - 获得点击元素