Vega-Lite / Altair: как центрировать или обрезать карту Европы? - PullRequest
1 голос
/ 10 апреля 2020

У меня есть некоторые данные по европейским странам. Я пытаюсь создать визуализацию в Altair / Vega-Lite, используя данные о мире на 110 м. Технически все работает нормально, за исключением того, что закодированные границы стран также включают отдаленные территории, создавая ужасную карту, которая выглядит следующим образом:

Bad Europe Map

Здесь мой код:

countries = alt.topo_feature(data.world_110m.url, 'countries')
source = df.copy()

map = alt.Chart(countries).mark_geoshape(
    stroke='black'
    ).encode(
    color=alt.Color('SomeStat:Q', sort="descending", scale=alt.Scale(
        scheme='inferno', domain=(min_value,max_value)), legend=alt.Legend(title="", tickCount=6))
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(source, 'CountryId', ['SomeStat', 'CountryName'])
).project(
    type='mercator'
)

Есть ли способ обрезать эту карту или центрировать ее так, чтобы я получал только Европу, а не отдаленные территории по всему миру?

В качестве альтернативы, есть ли лучший набор данных c, который я должен использовать, который включает только Европу?

1 Ответ

2 голосов
/ 10 апреля 2020

У меня нет вашего df набора данных, поэтому я публикую довольно простой пример.

import altair as alt
from vega_datasets import data

countries = alt.topo_feature(data.world_110m.url, 'countries')

alt.Chart(countries).mark_geoshape(
    fill='#666666',
    stroke='white'
).project(
    type= 'mercator',
    scale= 350,                          # Magnify
    center= [20,50],                     # [lon, lat]
    clipExtent= [[0, 0], [400, 300]],    # [[left, top], [right, bottom]]
).properties(
    title='Europe (Mercator)',
    width=400, height=300
)

enter image description here

Вы можете управлять картой просмотр по scale и center вместе с фактическим размером графика (width и height).

  • scale: параметр увеличения
  • center : центральная точка обзора

Если вам нужно обрезать любую часть карты, clipExtent может быть полезным. Пожалуйста, будьте осторожны - этот массив представляет размер пикселя, а не географические координаты. (В приведенном выше примере я установил [[0, 0], [400, 300]], чтобы он сохранял весь вид 400x300 px.

...