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

#python #number-formatting #pygal

#python #форматирование чисел #pygal

Вопрос:

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

Как выглядит моя карта в настоящее время; вы можете видеть, насколько сложно прочитать население.

Я уже пробовал использовать «{:,}».format(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:

Установка 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')
  

Комментарии:

1. Сработало отлично. Спасибо, что объяснили мою ошибку.