为什么同一组不能渲染正确的折线图和相应的范围图?

问题描述 投票:1回答:1

在这里小提琴:https://jsfiddle.net/8yf7j3k6/11/

我正在尝试为我的范围图表引入类似的数据表示,以便我可以在范围图表上进行清理,但是在循环数据的实际折线图中使用工具提示。目前,我认为我有两个问题正在破坏我的crossfilter并导致范围图表看起来很棘手:

  1. 如果我使用crossfilter生成的标准组,我最终会得到一个值(循环数据* number_of_regions_in_which_magazine_was_circulated)。为了绕过这个,我创建了一个地图,跟踪区域的数量,并划分表示的值。我无法弄清楚如何为此创建一个组,并在数据级别处理它。结果,我只是在渲染步骤中进行校正 - 这可能是我的困境的原因吗?
  2. 我在折线图和范围图表中使用完全相同的组。在NASDAQ sample中,他们似乎以不同的方式处理数据,但看起来他们只是以不同的方式对其进行分类,而不是做出戏剧性的改变。我不明白为什么我的图表在零点处具有如此显着的负值。

以下违规图表的代码。请注意,因为没有日期格式的CDN,所以在小提琴中有一些模板

    lineChart1
      .width(lineChart1Width-50)
      .height(lineChart1Height-50)
      .xUnits(d3.timeMonths)
      .margins({ top: 10, right: 10, bottom: 20, left: 80 })
      .dimension(dimension1)
      .rangeChart(lineChart1Range)
      .group(circulationGroup1)
      .colors(colorScales.blue[colorScales.blue.length - 1])
      .elasticY(true)
      .brushOn(false)
      .valueAccessor(function (d) {
          return d.value / circulationValuesMap[d.key]
      })
      .title(function (d) {
          return `${d.key.format('mmm dd, yyyy')}\nCirculation: ${d.value / circulationValuesMap[d.key]} `
      })
      .x(d3.scaleTime().domain([new Date(1925, 0, 1), new Date(1927, 0, 1)]))
      .render()


    lineChart1Range
      .width(getWidth('line-chart-1-range')) /* dc.barChart('#monthly-volume-chart', 'chartGroup'); */
      .height(40)
      .margins({top: 0, right: 50, bottom: 20, left: 80})
      .dimension(dimension1)
      .group(circulationGroup1)
      .valueAccessor(d => d.value / circulationValuesMap[d.key])
      .centerBar(true)
      .x(d3.scaleTime().domain([new Date(1925, 0, 1), new Date(1927, 0, 1)]))
      .round(d3.timeMonth.round)
      .alwaysUseRounding(true)
      .xUnits(() => 200);

    lineChart1Range.yAxis().ticks(0)
javascript d3.js data-visualization dc.js crossfilter
1个回答
2
投票

问题是你的CSS。

此规则适用于.line-chart-container内的任何元素的每个第一个子元素,也适用于画笔叠加层。

.line-chart-container :nth-child(1) {
  height: 15em;
}

:nth-child(2)也是如此。

替换实际div元素的2个CSS高度规则

#line-chart-1 {
  height: 15em;
}
#line-chart-1-range {
  height: 2em;
}

删除2个大条。

您的折线图和范围图表也没有对齐,它们具有不同的宽度和边距。

lineChart1Range
  //.width(getWidth('line-chart-1-range')) /* dc.barChart('#monthly-volume-chart', 'chartGroup'); */
  .width(lineChart1Width-50)
  .height(40)
  //.margins({top: 0, right: 50, bottom: 20, left: 80})
  .margins({top: 0, right: 10, bottom: 20, left: 80})
  .dimension(dimension1)
  .group(circulationGroup1)
  .valueAccessor(d => d.value / circulationValuesMap[d.key])
  .centerBar(true)
  .x(d3.scaleTime().domain([new Date(1925, 0, 1), new Date(1927, 0, 1)]))
  .round(d3.timeMonth.round)
  .alwaysUseRounding(true)
  .xUnits(() => 200);

所有的条都有工具提示,你看不到它们,因为画笔正在捕捉所有的鼠标事件。也许可以禁用此图表的工具提示

© www.soinside.com 2019 - 2024. All rights reserved.