Мне нужно создать в D3 диаграмму, как это: Интерактивный график Европы с помощью D3
Карта Европы (здесь очень упрощается с использованием квадратики вместо стран), чьи страны окрашены в соответствии с количеством смертей (вызванных болезнью выбора), которые были отобраны в этом году.
Больше цвета темнее и тем больше смертей (как описано в легенде).
Пользователь может выбрать год, который предпочитает использовать слайдер, и может выбрать болезнь с помощью переключателя. В зависимости от года и выбранной болезни, изменение цвета в странах.
Когда пользователь убирает курсор мыши на той или иной стране (например, Франция), справа появляется некоторые детали, как:
- страны
- год
- число от общего числа смертей
- число смертей, деленное на мужчин и женщин
Мой набор данных делается следующим образом:
"","Country","Year","Sex","Death","Value"
"3","Austria","2012","Male","Tuberculosis",18
"4","Austria","2012","Male","Tetanus",1
"5","Austria","2012","Male","Diphtheria",0
"1641","Austria","2012","Female","Tuberculosis",7
"1642","Austria","2012","Female","Tetanus",0
"1643","Austria","2012","Female","Diphtheria",0
"3409","Austria","2011","Male","Tuberculosis",27
"3410","Austria","2011","Male","Tetanus",0
"3411","Austria","2011","Male","Diphtheria",0
"5047","Austria","2011","Female","Tuberculosis",14
"5048","Austria","2011","Female","Tetanus",0
"5049","Austria","2011","Female","Diphtheria",0
"46829","Austria","1998","Male","Tuberculosis",61
"46830","Austria","1998","Male","Tetanus",0
"46831","Austria","1998","Male","Diphtheria",0
"48341","Austria","1998","Female","Tuberculosis",30
"48342","Austria","1998","Female","Tetanus",0
"48343","Austria","1998","Female","Diphtheria",0
"59309","Belgium","2010","Male","Tuberculosis",13
"59310","Belgium","2010","Male","Tetanus",0
"59311","Belgium","2010","Male","Diphtheria",0
"60947","Belgium","2010","Female","Tuberculosis",13
"60948","Belgium","2010","Female","Tetanus",2
"60949","Belgium","2010","Female","Diphtheria",0
...
Я искал, если есть какая-либо схожая графика, которую я могу использовать, но ничего не нашел.
Я попытался создать карту Европы, и это то, что я получил https://plnkr.co/edit/Ny0lUkVoiKeP76R95eVn?p=preview.
Диаграмма не работает, так как ей не хватает файла europe.json. Plunker не сохраняет, потому что файл слишком велик. Это является europe.json файлы и это то, что я вижу (если я прохожу курсор Франция):
В script.js файл представляет собой фрагмент кода (комментировал), который не работает. Это первый раз, когда я делаю графику с картами.
Хорошо, теперь я не знаю с чего начать. Как я могу, например, связать название страны с выбранной страной? И фильтровать данные в базовом году и болезни? Может ли кто-нибудь дать мне руку?
Я знаю, что я много прошу, но мне не нужен весь код, но помощь, чтобы двигаться вперед, чтобы развить график.
спасибо
Я почти закончил диаграмму, есть только две вещи, которые я не могу исправить: легенда и цвет тех стран, которые не меняются с выбранного года.
Вот код: PLUNKER
Для легенды я использовал library of Susie Lu. Легенда создана, но не окрашена. Я попытался изменить диапазон и использовать то же, что я использовал для окраски стран, но не работает.
// to color countries
var colors = d3.scale.linear()
.domain([0, 1, 2300])
.range(["#cccccc","#131313", "#ba3c28"]);
/**
* Legend.
*/
var quantize = d3.scale.quantize()
.domain([0, 1, 2300])
//.range(["#cccccc","#131313", "#ba3c28"]);
.range(d3.range(10).map(function(i) {
return "q" + i + "-10";
}));
var svg = d3.select("#leftDown")
.append("svg")
.attr("class", "legendQuantsvg");
svg.append("g")
.attr("class", "legendQuant")
.attr("transform", "translate(20, 20)");
var legend = d3.legend.color()
.labelFormat(d3.format(".0f"))
.useClass(true)
.scale(quantize);
svg.select(".legendQuant")
.call(legend);
Вторая проблема заключается в том, что если пользователь меняет год с помощью ползунка, цвет стран не изменяется. Я не понимаю, как обновить значение ползунка. Справа данные берутся правильно.
Не мог бы кто-нибудь мне помочь?
PS: Я не знаю, был ли я прав, чтобы изменить этот вопрос или мне пришлось открыть другой. В любом случае, спасибо.
Прежде всего: не используйте json, а используйте .topojson. Это карта .json ориентирована на веб-сайт и имеет 10% от размера. Используйте эту страницу для перевода с json на topojson: http://geojson.io загрузите файл и сохраните его как TopoJSON – Klaujesi
В вашем наборе данных есть неправильное определение заголовка, присвойте любое имя первому столбцу, то есть: id. «id», «Country», «Year», «Sex», «Death», «Value» – Klaujesi
, пожалуйста, присоединитесь к этой комнате: http://chat.stackoverflow.com/rooms/113858/interactive-map – Klaujesi