问题描述
我有一个使用 d3plus 创建的线图,我需要有多个线注释(一个水平和两个垂直)和 Shape 标签来识别它们。我能够正确显示线条,但无法在图表上显示多个标签。
这是我的一组数据:
[
{"id":"line","myDate":"Sep 2011","value":8303269},{"id":"line","myDate":"Jul 2012","value":8389066},"myDate":"Sep 2012","value":8632844},"myDate":"Mar 2013","value":8926414},"myDate":"Jun 2013","value":9169985},"myDate":"Mar 2014","value":9273689},"myDate":"Sep 2014","value":9343712},"myDate":"Dec 2014","value":9416974},"myDate":"May 2015","value":9546380},"myDate":"Sep 2015","value":10484320},"value":11455165},"myDate":"Dec 2015","value":11997581},"myDate":"Apr 2016","value":12104931},"myDate":"May 2016","value":12111915},"myDate":"Jun 2016","value":12127119},"myDate":"Jul 2016","value":12800226},"myDate":"Mar 2017","value":12915303},"myDate":"Nov 2017","value":12947360},"myDate":"Nov 2018","value":12957309}
]
这是我的 LinePlot annotations 数组。
new LinePlot()
.select("#demo")
.height(500)
.config({
data: vm.plotData,x: 'myDate',y: 'value',groupBy: 'id',annotations: [
{
data: [
{id: "start",x: "Jul 2012",y: 8000000},{id: "start",y: 20000000},{id: "end",x: "Nov 2017",{id: "dotted",x: "Sep 2011",y: this.item.ceilingValue},x: "Nov 2018",y: this.item.ceilingValue}
],shape: "Line",stroke: function(d) {
return d.id === "Box" ? "blue" : "green";
},strokeDasharray: "10",strokeWidth: 2
},{
data: [
{
x: 'Jul 2012',y: 20000000,width: 100,height: 25
}
],fill: "#0c1971",label: "Start Date",labelConfig: {
textAnchor: "middle",verticalAlign: "middle"
},shape: "Rect"
},{
data: [
{
x: 'Nov 2017',width: 10,fill: "#255832",label: "End Date",shape: "Rect"
}
]
})
.render()
发生的情况是,当我只有 Start Date
项时,它工作正常,但是当我添加 End Date
对象时,第一个消失了,而第二个没有完全呈现。
根据文档,annotations
接受
Shape 类的自定义配置对象,可以是单个配置对象或配置对象数组。`,
这是我提供的,所以我不确定问题出在哪里。我需要更改哪些内容才能正确显示所有标签?
解决方法
我能够根据 this comment 算出来。要点是您必须将特定形状的所有项目组合成一个对象:
annotations: [
{
data: [
{id: "start",x: "Jul 2012",y: 8000000},{id: "start",y: 20000000},{id: "end",x: "Nov 2017",{id: "dotted",x: "Sep 2011",y: this.item.ceilingValue},x: "Nov 2018",y: this.item.ceilingValue}
],shape: "Line",stroke: function(d) {
return d.id === "box" ? "blue" : "green";
},strokeDasharray: "10",strokeWidth: 2
},{
data: [
{
id: 'start',label: 'Start Date',x: 'Jul 2012',y: 20000000,width: 100,height: 25
},{
id: 'end',label: 'End Date',x: 'Nov 2017',height: 25
}
],fill: function(d) {
let result;
switch (d.id) {
case 'start':
result = "#0c1971";
break;
case 'end':
result = "#255832";
break;
}
return result;
},label: function (d) {
let result;
switch (d.id) {
case 'start':
result = "Start Date";
break;
case 'end':
result = "End Date";
break;
}
return result;
},labelConfig: {
textAnchor: "middle",verticalAlign: "middle"
},shape: "Rect"
}
]