Форматирование данных. Первый шаг - это вставить их в JSON, используя какой-то внешний инструмент (для этого мне действительно нравится Google Refine , хотя это довольно большой инструмент, если это все, что вам нужно - попробуйте Mr. Data Converter для быстрого и грязного варианта). Эти инструменты, вероятно, предоставят вам данные в виде объекта JSON, например:
`[{"Province":"A", "Year":"1970", "10":2, "100":4, "1000":6, "10000":3}, ...]`
Как только у вас будут данные в формате JSON, вы захотите привести их в форму для своих виз. Вы захотите передать каждому pv.Area массив значений - из вашего описания похоже, что вы хотите получить значения [10, 100, 1000, 10000]. В Protovis есть много инструментов для манипулирования данными - см. Оператор pv.Nest . Есть много способов подойти к этому - я мог бы сделать это:
data = pv.nest(data)
.key(function(x) {return x.Province})
.key(function(x) {return x.Year})
.rollup(function(v) {
return [v[0]['10'], v[0]['100'], v[0]['1000'], v[0]['10000']];
});
, который дает вам объект, подобный:
{
A: {
1970: [2,4,6,3]
// ...
},
// ...
}
Это настраивает вас на элементы интерфейса. Сохраните массив проверенных провинций и текущий год в глобальных переменных:
var currentProvinces = ['A', 'B', ...];
var currentYear = 1970;
и настройте свою область для ссылки на эти переменные:
// a containing panel to help with layout and data
var panel = vis.add(pv.Panel)
.data(function() currentProvinces); // making this a function allows it to
// be re-evaluated later
// the area itself
var area = panel.add(pv.Area)
.data(function(province) data[province][currentYear]);
// plus more area settings as needed
Теперь используйте некоторую другую библиотеку - я неравнодушен к jQuery, с jQuery UI для слайдера - для создания элементов интерфейса. Функция onchange для каждого элемента просто должна установить соответствующую глобальную переменную и вызвать vis.render()
(предполагается, что ваша корневая панель называется vis
). Это должно быть довольно просто - смотрите здесь для примера Protovis, использующего пользовательский интерфейс jQuery, чтобы сделать бегунок времени очень похожим на то, что вы имеете в виду.