如何在d3条形图中添加一组注释
How to add an array of annotations to a d3 barchart?
我已经通过读取CSV数据,然后使用d3.nest()
对每年每个日期的数据进行分组,为每年的数据绘制了一个条形图(我知道它是倒置的:),请参阅此处的块或此处的块生成器。然而,我现在正试图将annotations
数组中的注释附加到每个图表中,结果我被卡住了。
我正在尝试的一种方法是selectAll(".charts")
并附加我的嵌套注释数组,即annotationsPerYear
。但我发现很难将我的annotationsPerYear键与图表结合起来,然后迭代并将每年的注释附加到正确的图表上。有什么想法吗?
您可以依靠嵌套选择来实现这一点。您已经在使用嵌套选择与此位:
svg.selectAll(".bar")
.data(function(d) {return d.values;})
上面将不同的数据绑定到前面创建的3个SVG中的每一个。它通过调用function(d)
3次来实现这一点,每次都返回不同的d.values
。
您可以执行类似的操作,在每个SVG中绑定并创建一组不同的注释。您需要一个函数(传递给data()
)来返回每个图表的适用注释,但这一次您没有像d.values
那样预先计算的内容。相反,您必须使用filter()
:从annotations
数组中提取适用的注释
svg.selectAll(".annotation")
.data(function(d) {
// return annotations whose key matches d's key
return annotations.filter(function(a) { return a.key == d.key; });
})
然后你可以使用enter()
和append()
,就像你对条形图所做的那样,来创建文本并定位它。我不确定你打算如何布局,但总的来说,你想要这样的东西:
svg.selectAll(".annotation")
.data(function(d) {
return annotations.filter(function(a) { return a.key == d.key; });
})
.enter()
.append("text")
.attr("class", "annotation")
.attr("x", function(d) { return x(d.xPos); })
.attr("y", function(d) { return d.yPos; })
.text(function(d) { return d.note; })
参见:
- 更新的块
- 更新的块生成器
相关文章:
- fluxxor向一个flux实例添加一组以上的操作
- 我们怎样才能将内含子J用于一组特定的元素
- 使用linq.js按当前日期订购一组momentjs日期
- 正则表达式,从一组关键字中获取奇数
- 创建一组元素JointJS
- 如何在javascript中获取一组复选框值
- 一组(共组..)
- 使用JS将页面中的每个字母设置为随机颜色.为什么在页面的每个打开标记之前总是有一组额外的span标记
- 在一组复选框中,一次只允许选择一个
- 为什么在fabricjs中可选择的不适用于一组圆
- 如何在不刷新页面的情况下每次单击一组选项卡时刷新视图内容窗格
- 从一组具有相同起始和结束的所有段落的段落中提取包含特定字符串的段落
- 简单的Javascript文本编辑器或一组函数
- 基于日期范围的一组日期范围内的天数
- 处理对象数组并将它们以 4 个为一组进行分配
- 如何在 Javascript 中用一组字符拆分子字符串上的字符串
- 使一组对象与 jQuery 一起拖动
- 使用第 n 个类型设置一组八个元素的样式
- 一次循环遍历一组
- 如何在d3条形图中添加一组注释