При использовании pygal.maps.world есть ли способ отформатировать числа, отображающие население страны? - PullRequest
0 голосов
/ 30 марта 2019

Я использую pygal для создания интерактивной карты, показывающей население стран мира с 2010 года. Я пытаюсь найти способ, чтобы население страны отображало запятые, т.е. как 10000, а не просто 10000.

What my map currently looks like; you can see how hard the populations are to read.

Я уже пытался использовать формат "{:,}". (X) при чтении чисел в мои списки для разных уровней населения, но это вызывает ошибку.Я считаю, что это потому, что это меняет значение на строку.

Я также попытался вставить фрагмент кода, который нашел в Интернете

 wm.value_formatter = lambda x: "{:,}".format(x).

Это не вызывает никаких ошибок, но также не исправляет форматирование чисел.Я надеюсь, что кто-то может знать о встроенной функции, такой как:

wm_style = RotateStyle('#336699')

, которая позволяет мне установить цветовую схему.

Ниже приведена часть моего кода, которая строит карту.

wm = World()

wm.force_uri_protocol = "http"

wm_style = RotateStyle('#996699')
wm.value_formatter = lambda x: "{:,}".format(x)
wm.value_formatter = lambda y: "{:,}".format(y)
wm = World(style=wm_style)

wm.title = "Country populations year 2010"
wm.add('0-10 million', cc_pop_low)
wm.add("10m to 1 billion", cc_pop_mid)
wm.add('Over 1 billion', cc_pop_high)

wm.render_to_file('world_population.svg')

1 Ответ

1 голос
/ 30 марта 2019

Установка свойства value_formatter изменит формат метки, но в вашем коде вы воссоздаете объект World после установки свойства. Этот вновь созданный объект будет иметь форматировщик значений по умолчанию. Вы также можете удалить одну из строк, задающих свойство value_formatter, поскольку обе они достигают одного и того же.

Повторный заказ кода решит вашу проблему:

wm_style = RotateStyle('#996699')
wm = World(style=wm_style)
wm.value_formatter = lambda x: "{:,}".format(x)
wm.force_uri_protocol = "http"

wm.title = "Country populations year 2010"
wm.add('0-10 million', cc_pop_low)
wm.add("10m to 1 billion", cc_pop_mid)
wm.add('Over 1 billion', cc_pop_high)

wm.render_to_file('world_population.svg')
...