Использование Bokeh или ArcPy для маркировки карт - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Bokeh для создания картограмм и другой географической графики, потому что Python выплевывает ее в миллион раз быстрее, чем я мог бы создать ее другим способом.

Сейчас я делаю что-то вроде:

from bokeh.io import show, output_file, export_png, output_notebook, output_file, save
from bokeh.models import ColumnDataSource, HoverTool, LabelSet
from bokeh.plotting import figure
from bokeh.sampledata.us_counties import data as counties
import pandas as pd

desired_counties=['Franklin County, Ohio','Fairfield County, Ohio']
counties2 = {code: county for code, county in counties.items() if county["detailed name"] in desired_counties}

unemploymentRate = {'Location': desired_counties, 'rate': [100, 100]} #placeholders
df = pd.DataFrame(data=unemploymentRate)

county_xs = [county["lons"] for county in counties2.values()]
county_ys = [county["lats"] for county in counties2.values()]
county_names = [county['name'] for county in counties2.values()]
unemployment = [df.loc[index,'rate'] for county in counties2.values() for index, row in df.iterrows() if df.loc[index,'Location']==county['detailed name']]

source = ColumnDataSource(data=dict(x=county_xs,y=county_ys,name=county_names,rate=unemployment))

TOOLS="hover,save"
p = figure(x_axis_location=None, y_axis_location=None, plot_width=350,plot_height=250,tools=TOOLS)
p.grid.grid_line_color = None
p.outline_line_color = None
p.patches('x', 'y', source=source,
          fill_color='#007a33',
          fill_alpha=1, line_color="black", line_width=3.5)
hover = p.select_one(HoverTool)
hover.point_policy = "follow_mouse"
hover.tooltips = [
    ("Name", "@name"),
    ("Rate","@rate{0.0}%")
]
labels = LabelSet(x='x', y='y', text='name', level='glyph',
          x_offset=0, y_offset=0, source=source, render_mode='css')
p.add_layout(labels)
p.toolbar.logo = None
p.toolbar_location = None
show(p)

Что дает: Image of Franklin and Fairfield counties in Ohio

При наведении курсора на изображение я вижу нужные данные, но я предпочел бы, чтобы данные были аннотированы наизображение вместо этого для возможности печати.Использование класса LabelSet, который Боке имеет в своей документации, кажется идеальным, за исключением того, что он ориентирован на графики xy, поэтому при попытке использовать его здесь он просто размещает метки в углу.

Вопросы:

  1. Кто-нибудь знает, как наносить метки на хороплет Боке без использования стороннего графического программного обеспечения?
  2. У меня есть ArcGIS Pro, который, очевидно, может создавать карты такого типа, но я ищу что-то, что делает это с помощью программирования.,Я использую Bokeh прямо сейчас, потому что я могу сказать, что это центральный округ, который я хочу, и у меня написан код, который делает меня картой штата с выделением нужного округа и окружающих его округов, создает карту-вставку округа / окружающих округови дает данные при наведении на карту врезки уровня безработицы в этих округах (рисунок / код выше является упрощенной версией этого).Есть ли способ сделать это, используя вместо этого AcrPy / ArcGIS?

1 Ответ

0 голосов
/ 03 декабря 2018

Причина, по которой ваши метки смещены, заключается в том, что вы указываете им использовать поля 'x' и 'y' из источника данных, но у источника данных нет этих столбцов.Вы можете вычислить «центр» каждой фигуры и добавить их в качестве столбцов x и y в источник, тогда все будет отображаться так, как вы хотите.

...