Я работаю над перекрестным фильтром между линейным графиком и хороплетом. Недавно я получил гораздо лучшее представление о методе Reduce в dc.js, поэтому я хочу передать еще несколько метаданных о каждой точке данных в мою линейную диаграмму и в мой хороплет. Это очень хорошо работает для линейного графика, и теперь у меня есть всплывающая подсказка, показывающая много информации о каждой точке.
Однако для моего хороплета переход к использованию Reduce вместо ReduSum действительно испортил мои данные. Например:
- Значение, передаваемое во всплывающую подсказку, - это не те данные, которые я ожидал, и я понятия не имею, откуда исходит вычисление (почти кажется, что оно из пути SVG или даже из средства доступа к цвету?)
- Когда я переключаюсь между различными изображениями хороплета, мой хороплет меняется, но значение во всплывающей подсказке остается точно таким же
- Первоначальный рендеринг хороплета показывает полностью синюю карту, поэтому в любом случае кажется, что начальное значение может быть неправильным.
Я пытаюсь понять, как я могу определить точку данных, которая поступает из группы, использовать ее для визуализации хороплета на основе определенного значения (total_sampled_sales), а затем передать эти данные во всплывающую подсказку, чтобы значение каждого состояния и метаданные могут отображаться.
Кроме того, любые советы по отладке этого типа проблемы будут с благодарностью. Как вы можете видеть из моих console.logs, мне трудно отследить данные до всплывающей подсказки. Это предположительно проблемный блок:
us1Chart.customUpdate = () => {
us1Chart.colorDomain(generateScale(returnGroup()))
us1Chart.group(returnGroup())
}
us1Chart.width(us1Width)
.height(us1Height)
.dimension(stateRegion)
.group(returnGroup())
.colors(d3.scaleQuantize().range(colorScales.blue))
.colorDomain(generateScale(returnGroup()))
.colorAccessor(d => {
// console.log('colorAccessor:', d)
return d ? d : 0
})
.overlayGeoJson(statesJson.features, "state", d => {
// console.log(`geojson`, d, d.properties.name)
return d.properties.name
})
.projection(d3.geoAlbersUsa()
.scale(Math.min(getWidth('us1-chart') * 2.5, getHeight('us1-chart') * 1.7))
.translate([getWidth('us1-chart') / 2.5, getHeight('us1-chart') / 2.5])
)
.valueAccessor(kv => {
// console.log(kv.value)
if (kv.value !== undefined) return kv.value
})
.renderTitle(false)
.on('pretransition', (chart) => {
chart.selectAll('path')
.call(mapTip)
.on('mouseover.mapTip', mapTip.show)
.on('mouseout.mapTip', mapTip.hide);
})
https://jsfiddle.net/ayyrickay/f1vLwhmq/19/
Обратите внимание, что данные немного шаткие, потому что я удалил половину записей только для ограничения размера