如何在DC.js系列图表中为不同的线条绘制不同的线条图案?

时间:2017-07-27 06:29:30

标签: javascript d3.js dc.js

这是我生成的图表的图像:Current Series Chart

我已将dashStyle函数应用于线图对象,该对象已将相同的图案应用于所有线条。我需要绘制一个系列图表,每一行都有不同的图案(虚线,点线,平面线等)。图表函数中的“c”对象中有很多属性。我不确定哪个属性对应于数据值。 “c”对象的data属性类似于“_dc / dc.baseMixin / _chart.data()”我是javascript和dc js的新手,并不完全了解幕后发生的事情。

有没有办法在折线图中为不同的线条绘制不同的图案?

这是我在参考此示例后实现的当前代码:http://dc-js.github.io/dc.js/examples/range-series.html

 focusChart
.width(920)
.height(380)
.chart(function(c) { console.log(c);return dc.lineChart(c).dashStyle([2,3]).interpolate('cardinal').evadeDomainFilter(true); })
.x(d3.scale.linear().domain([1995,2017]))
.brushOn(false)

.yAxisLabel("Topic Weight")
.xAxisLabel("Year")
.elasticY(true)
.dimension(series1Dimension)
.group(series1Group)
.colorAccessor(function(d){
  return d.key.split(",")[0].slice(5);
})
.colors(TopicColorScale)
focusChart.seriesAccessor(function(d) {return " " + d.key[0];})
.keyAccessor(function(d) {return +d.key[1];})
.valueAccessor(function(d) {return +d.value;})

.legend(dc.legend().x(400).itemHeight(13).gap(1).horizontal(10).legendWidth(540).itemWidth(210));


 focusChart.yAxis().tickFormat(function(d) {return d3.format('d')(d);});


 focusChart.xAxis().tickFormat(function(d) {return d3.format('d')(d);});


focusChart.margins().left += 20;

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

该行

.chart(function(c) { console.log(c);return dc.lineChart(c).dashStyle([2,3]).interpolate('cardinal').evadeDomainFilter(true); })

提供生成子图的功能。此函数的参数appear to be undocumented,但quick look at the source reveals

var subChart = _charts[sub.key] || _chartFunction.call(_chart, _chart, chartGroup, sub.key, i);

该函数采用以下参数:

  1. 复合图表
  2. 注册复合图表的图表组
  3. 子图的关键
  4. 子图的索引
  5. 这是你想要的第三个论点。它是您seriesAccessor返回的密钥,您可以根据该密钥使用您想要设置dashStyle的任何方法。