Визуализация круговых диаграмм на карте - PullRequest
0 голосов
/ 04 июня 2019

У меня есть Excel, где каждая строка имеет данные широты и долготы, связанные с некоторыми целочисленными значениями.Я хотел бы представить это в виде круговых диаграмм на карте.

То, что я пробовал до сих пор:

  1. Google Data Studio. Единственный недостаток в том, что мы не можем увеличить карту, и карта масштабируется на уровне страны, но все мои данныео районе в городе.
  2. Python с Folium: Folium - это обертка для Leaflet.js, которая отлично подходит для географической визуализации.Однако в нем отсутствует функция круговой диаграммы. Я смотрел на интеграцию с Vega , но это хорошо только для всплывающих окон на маркерах.Это нехорошо, мне нужны прямые круговые диаграммы на карте.

Можете ли вы порекомендовать какой-либо бесплатный инструмент или решение Python для этого?

Я в основном из Python, но также приветствую решения на основе JS.

1 Ответ

1 голос
/ 06 июня 2019

Я думаю Highcharts может помочь вам с тем, что вы ищете. Они основаны на JavaScript.

Пример именно того, что вы ищете -

https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/maps/demo/map-pies/

{
title: {
    text: 'USA 2016 Presidential Election Results'
},

chart: {
    animation: false // Disable animation, especially for zooming
},

colorAxis: {
    dataClasses: [{
        from: -1,
        to: 0,
        color: 'rgba(244,91,91,0.5)',
        name: 'Republican'
    }, {
        from: 0,
        to: 1,
        color: 'rgba(124,181,236,0.5)',
        name: 'Democrat'
    }, {
        from: 2,
        to: 3,
        name: 'Libertarian',
        color: libColor
    }, {
        from: 3,
        to: 4,
        name: 'Green',
        color: grnColor
    }]
},

mapNavigation: {
    enabled: true
},
// Limit zoom range
yAxis: {
    minRange: 2300
},

tooltip: {
    useHTML: true
},

// Default options for the pies
plotOptions: {
    mappie: {
        borderColor: 'rgba(255,255,255,0.4)',
        borderWidth: 1,
        tooltip: {
            headerFormat: ''
        }
    }
},

series: [{
    mapData: Highcharts.maps['countries/us/us-all'],
    data: data,
    name: 'States',
    borderColor: '#FFF',
    showInLegend: false,
    joinBy: ['name', 'id'],
    keys: ['id', 'demVotes', 'repVotes', 'libVotes', 'grnVotes',
        'sumVotes', 'value', 'pieOffset'],
    tooltip: {
        headerFormat: '',
        pointFormatter: function () {
            var hoverVotes = this.hoverVotes; // Used by pie only
            return '<b>' + this.id + ' votes</b><br/>' +
                Highcharts.map([
                    ['Democrats', this.demVotes, demColor],
                    ['Republicans', this.repVotes, repColor],
                    ['Libertarians', this.libVotes, libColor],
                    ['Green', this.grnVotes, grnColor]
                ].sort(function (a, b) {
                    return b[1] - a[1]; // Sort tooltip by most votes
                }), function (line) {
                    return '<span style="color:' + line[2] +
                        // Colorized bullet
                        '">\u25CF</span> ' +
                        // Party and votes
                        (line[0] === hoverVotes ? '<b>' : '') +
                        line[0] + ': ' +
                        Highcharts.numberFormat(line[1], 0) +
                        (line[0] === hoverVotes ? '</b>' : '') +
                        '<br/>';
                }).join('') +
                '<hr/>Total: ' + Highcharts.numberFormat(this.sumVotes, 0);
        }
    }
}, {
    name: 'Separators',
    type: 'mapline',
    data: Highcharts.geojson(Highcharts.maps['countries/us/us-all'], 'mapline'),
    color: '#707070',
    showInLegend: false,
    enableMouseTracking: false
}, {
    name: 'Connectors',
    type: 'mapline',
    color: 'rgba(130, 130, 130, 0.5)',
    zIndex: 5,
    showInLegend: false,
    enableMouseTracking: false
}]

}

...