Катрограф (Python) - несовместимый условный стиль?
В настоящее время я пытаюсь с помощью Kartograph.py с помощью Kartograph.py сгенерировать подборку средних ценностей дома. Я был в состоянии предварительно собрать хороплет с помощью конфигурации и строки CSS, содержащейся в моем блокноте. (Обратите внимание, что tel
моя переменная интереса, иdbf_in
является DataFrame pandas, содержащим информацию в таблице.dbf, связанную с моим шейп- файлом состояния.)
#Create color map
col_map=dict(zip(dbf_in['tel'],dbf_in['color']))
#Generate configuration dict
config={"proj":{
"id":"laea-usa"},
"layers":{
"USA": {
"src": shp_dir+"cb_2013_us_state_5m.shp",
"attributes":"all"},
"Lakes":{
"src": shp_dir+"ne_10m_lakes.shp",
"subtract-from": "USA",
"filter":{
"scalerank":0}}},
"bounds":{
"mode":"bbox",
"data":[-180,15,-65,55],}}
#Initialize Kartograph obj1ct
K=Kartograph()
#Generate style sheet
css_list=[]
for i in range(1,5):
css_list.append('#USA[tel='+str(i)+']{fill: '+col_map[i]+'; stroke: #FFFFFF;}')
css='\n'.join(css_list)
#Generate blank map
K.generate(config, outfile='TEL_bind_states.svg',stylesheet=css)
Просто для полноты, вот строка CSS:
#USA[tel=1]{fill: #fcbba1; stroke: #FFFFFF;}
#USA[tel=2]{fill: #fb694a; stroke: #FFFFFF;}
#USA[tel=3]{fill: #ca181d; stroke: #FFFFFF;}
#USA[tel=4]{fill: #67000d; stroke: #FFFFFF;}
В двух словах, я смог динамически построить свою строку CSS, и это дало SVG-версию следующего изображения:
Аналогичный протокол был использован для создания хороплета на государственном уровне:
#Map colors to counties
col_map=dict(zip(acs['id5'],acs['color']))
#Generate style sheet
css_list=[]
for key in col_map.keys():
css_list.append('#County[geoid='+key+']{fill: '+col_map[key]+'; stroke: #FFFFFF;}')
css='\n'.join(css_list[1:])
#Generate configuration dict
config={"proj":{
"id":"laea-usa"},
"layers":{
"County": {
"src": shp_dir+"tl_2014_us_county.shp",
"attributes":"all",
"simplify":3}},
"bounds":{
"mode":"bbox",
"data":[-180,15,-65,55],}}
#Initialize Kartograph obj1ct
K=Kartograph()
#Generate blank map
K.generate(config, outfile='blank_US_cty.svg',stylesheet=css)
Вот первый раздел строки CSS:
#County[geoid=16079]{fill: #fee0d2; stroke: #FFFFFF;}
#County[geoid=33017]{fill: #fdc5ae; stroke: #FFFFFF;}
#County[geoid=16073]{fill: #fee1d4; stroke: #FFFFFF;}
#County[geoid=16071]{fill: #fee3d7; stroke: #FFFFFF;}
#County[geoid=16077]{fill: #fee1d3; stroke: #FFFFFF;}
#County[geoid=16075]{fill: #fee1d3; stroke: #FFFFFF;}
#County[geoid=48093]{fill: #feeae0; stroke: #FFFFFF;}
#County[geoid=06115]{fill: #fdd0bc; stroke: #FFFFFF;}
#County[geoid=06111]{fill: #fa6648; stroke: #FFFFFF;}
На этот раз, однако, я не могу заставить цвета связываться с полигонами так же, как со штатами. На этот раз он дает следующее изображение:
Есть мысли о том, почему это происходит? Я считал, что, может быть, проблематично создать словарь с более чем 3000 элементов, но я получил те же результаты, когда попытался раскрасить переменную только пятью уникальными значениями.