mirror of https://github.com/Kozea/pygal.git
Florian Mounier
10 years ago
10 changed files with 12 additions and 2835 deletions
Before Width: | Height: | Size: 760 KiB |
@ -1,69 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
# This file is part of pygal |
|
||||||
# |
|
||||||
# A python svg graph plotting library |
|
||||||
# Copyright © 2012-2014 Kozea |
|
||||||
# |
|
||||||
# This library is free software: you can redistribute it and/or modify it under |
|
||||||
# the terms of the GNU Lesser General Public License as published by the Free |
|
||||||
# Software Foundation, either version 3 of the License, or (at your option) any |
|
||||||
# later version. |
|
||||||
# |
|
||||||
# This library is distributed in the hope that it will be useful, but WITHOUT |
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
|
||||||
# details. |
|
||||||
# |
|
||||||
# You should have received a copy of the GNU Lesser General Public License |
|
||||||
# along with pygal. If not, see <http://www.gnu.org/licenses/>. |
|
||||||
""" |
|
||||||
Worldmap chart |
|
||||||
|
|
||||||
""" |
|
||||||
|
|
||||||
from __future__ import division |
|
||||||
from pygal.util import cached_property |
|
||||||
from pygal.graph.map import BaseMap |
|
||||||
from pygal.i18n import COUNTRIES, SUPRANATIONAL |
|
||||||
import os |
|
||||||
|
|
||||||
|
|
||||||
with open(os.path.join( |
|
||||||
os.path.dirname(__file__), 'maps', |
|
||||||
'worldmap.svg')) as file: |
|
||||||
WORLD_MAP = file.read() |
|
||||||
|
|
||||||
|
|
||||||
class Worldmap(BaseMap): |
|
||||||
"""Worldmap graph""" |
|
||||||
x_labels = list(COUNTRIES.keys()) |
|
||||||
area_names = COUNTRIES |
|
||||||
area_prefix = '' |
|
||||||
svg_map = WORLD_MAP |
|
||||||
kind = 'country' |
|
||||||
|
|
||||||
@cached_property |
|
||||||
def countries(self): |
|
||||||
return [val[0] |
|
||||||
for serie in self.all_series |
|
||||||
for val in serie.values |
|
||||||
if val[0] is not None] |
|
||||||
|
|
||||||
@cached_property |
|
||||||
def _values(self): |
|
||||||
"""Getter for series values (flattened)""" |
|
||||||
return [val[1] |
|
||||||
for serie in self.series |
|
||||||
for val in serie.values |
|
||||||
if val[1] is not None] |
|
||||||
|
|
||||||
|
|
||||||
class SupranationalWorldmap(Worldmap): |
|
||||||
"""SupranationalWorldmap graph""" |
|
||||||
x_labels = list(SUPRANATIONAL.keys()) |
|
||||||
|
|
||||||
def enumerate_values(self, serie): |
|
||||||
"""Replaces the values if it contains a supranational code.""" |
|
||||||
for i, (code, value) in enumerate(serie.values): |
|
||||||
for subcode in SUPRANATIONAL.get(code, []): |
|
||||||
yield i, (subcode, value) |
|
@ -1,260 +0,0 @@ |
|||||||
COUNTRIES = { |
|
||||||
'ad': 'Andorra', |
|
||||||
'ae': 'United Arab Emirates', |
|
||||||
'af': 'Afghanistan', |
|
||||||
'al': 'Albania', |
|
||||||
'am': 'Armenia', |
|
||||||
'ao': 'Angola', |
|
||||||
'aq': 'Antarctica', |
|
||||||
'ar': 'Argentina', |
|
||||||
'at': 'Austria', |
|
||||||
'au': 'Australia', |
|
||||||
'az': 'Azerbaijan', |
|
||||||
'ba': 'Bosnia and Herzegovina', |
|
||||||
'bd': 'Bangladesh', |
|
||||||
'be': 'Belgium', |
|
||||||
'bf': 'Burkina Faso', |
|
||||||
'bg': 'Bulgaria', |
|
||||||
'bh': 'Bahrain', |
|
||||||
'bi': 'Burundi', |
|
||||||
'bj': 'Benin', |
|
||||||
'bn': 'Brunei Darussalam', |
|
||||||
'bo': 'Bolivia, Plurinational State of', |
|
||||||
'br': 'Brazil', |
|
||||||
'bt': 'Bhutan', |
|
||||||
'bw': 'Botswana', |
|
||||||
'by': 'Belarus', |
|
||||||
'bz': 'Belize', |
|
||||||
'ca': 'Canada', |
|
||||||
'cd': 'Congo, the Democratic Republic of the', |
|
||||||
'cf': 'Central African Republic', |
|
||||||
'cg': 'Congo', |
|
||||||
'ch': 'Switzerland', |
|
||||||
'ci': "Cote d'Ivoire", |
|
||||||
'cl': 'Chile', |
|
||||||
'cm': 'Cameroon', |
|
||||||
'cn': 'China', |
|
||||||
'co': 'Colombia', |
|
||||||
'cr': 'Costa Rica', |
|
||||||
'cu': 'Cuba', |
|
||||||
'cv': 'Cape Verde', |
|
||||||
'cy': 'Cyprus', |
|
||||||
'cz': 'Czech Republic', |
|
||||||
'de': 'Germany', |
|
||||||
'dj': 'Djibouti', |
|
||||||
'dk': 'Denmark', |
|
||||||
'do': 'Dominican Republic', |
|
||||||
'dz': 'Algeria', |
|
||||||
'ec': 'Ecuador', |
|
||||||
'ee': 'Estonia', |
|
||||||
'eg': 'Egypt', |
|
||||||
'eh': 'Western Sahara', |
|
||||||
'er': 'Eritrea', |
|
||||||
'es': 'Spain', |
|
||||||
'et': 'Ethiopia', |
|
||||||
'fi': 'Finland', |
|
||||||
'fr': 'France', |
|
||||||
'ga': 'Gabon', |
|
||||||
'gb': 'United Kingdom', |
|
||||||
'ge': 'Georgia', |
|
||||||
'gf': 'French Guiana', |
|
||||||
'gh': 'Ghana', |
|
||||||
'gl': 'Greenland', |
|
||||||
'gm': 'Gambia', |
|
||||||
'gn': 'Guinea', |
|
||||||
'gq': 'Equatorial Guinea', |
|
||||||
'gr': 'Greece', |
|
||||||
'gt': 'Guatemala', |
|
||||||
'gu': 'Guam', |
|
||||||
'gw': 'Guinea-Bissau', |
|
||||||
'gy': 'Guyana', |
|
||||||
'hk': 'Hong Kong', |
|
||||||
'hn': 'Honduras', |
|
||||||
'hr': 'Croatia', |
|
||||||
'ht': 'Haiti', |
|
||||||
'hu': 'Hungary', |
|
||||||
'id': 'Indonesia', |
|
||||||
'ie': 'Ireland', |
|
||||||
'il': 'Israel', |
|
||||||
'in': 'India', |
|
||||||
'iq': 'Iraq', |
|
||||||
'ir': 'Iran, Islamic Republic of', |
|
||||||
'is': 'Iceland', |
|
||||||
'it': 'Italy', |
|
||||||
'jm': 'Jamaica', |
|
||||||
'jo': 'Jordan', |
|
||||||
'jp': 'Japan', |
|
||||||
'ke': 'Kenya', |
|
||||||
'kg': 'Kyrgyzstan', |
|
||||||
'kh': 'Cambodia', |
|
||||||
'kp': "Korea, Democratic People's Republic of", |
|
||||||
'kr': 'Korea, Republic of', |
|
||||||
'kw': 'Kuwait', |
|
||||||
'kz': 'Kazakhstan', |
|
||||||
'la': "Lao People's Democratic Republic", |
|
||||||
'lb': 'Lebanon', |
|
||||||
'li': 'Liechtenstein', |
|
||||||
'lk': 'Sri Lanka', |
|
||||||
'lr': 'Liberia', |
|
||||||
'ls': 'Lesotho', |
|
||||||
'lt': 'Lithuania', |
|
||||||
'lu': 'Luxembourg', |
|
||||||
'lv': 'Latvia', |
|
||||||
'ly': 'Libyan Arab Jamahiriya', |
|
||||||
'ma': 'Morocco', |
|
||||||
'mc': 'Monaco', |
|
||||||
'md': 'Moldova, Republic of', |
|
||||||
'me': 'Montenegro', |
|
||||||
'mg': 'Madagascar', |
|
||||||
'mk': 'Macedonia, the former Yugoslav Republic of', |
|
||||||
'ml': 'Mali', |
|
||||||
'mm': 'Myanmar', |
|
||||||
'mn': 'Mongolia', |
|
||||||
'mo': 'Macao', |
|
||||||
'mr': 'Mauritania', |
|
||||||
'mt': 'Malta', |
|
||||||
'mu': 'Mauritius', |
|
||||||
'mv': 'Maldives', |
|
||||||
'mw': 'Malawi', |
|
||||||
'mx': 'Mexico', |
|
||||||
'my': 'Malaysia', |
|
||||||
'mz': 'Mozambique', |
|
||||||
'na': 'Namibia', |
|
||||||
'ne': 'Niger', |
|
||||||
'ng': 'Nigeria', |
|
||||||
'ni': 'Nicaragua', |
|
||||||
'nl': 'Netherlands', |
|
||||||
'no': 'Norway', |
|
||||||
'np': 'Nepal', |
|
||||||
'nz': 'New Zealand', |
|
||||||
'om': 'Oman', |
|
||||||
'pa': 'Panama', |
|
||||||
'pe': 'Peru', |
|
||||||
'pg': 'Papua New Guinea', |
|
||||||
'ph': 'Philippines', |
|
||||||
'pk': 'Pakistan', |
|
||||||
'pl': 'Poland', |
|
||||||
'pr': 'Puerto Rico', |
|
||||||
'ps': 'Palestine, State of', |
|
||||||
'pt': 'Portugal', |
|
||||||
'py': 'Paraguay', |
|
||||||
're': 'Reunion', |
|
||||||
'ro': 'Romania', |
|
||||||
'rs': 'Serbia', |
|
||||||
'ru': 'Russian Federation', |
|
||||||
'rw': 'Rwanda', |
|
||||||
'sa': 'Saudi Arabia', |
|
||||||
'sc': 'Seychelles', |
|
||||||
'sd': 'Sudan', |
|
||||||
'se': 'Sweden', |
|
||||||
'sg': 'Singapore', |
|
||||||
'sh': 'Saint Helena, Ascension and Tristan da Cunha', |
|
||||||
'si': 'Slovenia', |
|
||||||
'sk': 'Slovakia', |
|
||||||
'sl': 'Sierra Leone', |
|
||||||
'sm': 'San Marino', |
|
||||||
'sn': 'Senegal', |
|
||||||
'so': 'Somalia', |
|
||||||
'sr': 'Suriname', |
|
||||||
'st': 'Sao Tome and Principe', |
|
||||||
'sv': 'El Salvador', |
|
||||||
'sy': 'Syrian Arab Republic', |
|
||||||
'sz': 'Swaziland', |
|
||||||
'td': 'Chad', |
|
||||||
'tg': 'Togo', |
|
||||||
'th': 'Thailand', |
|
||||||
'tj': 'Tajikistan', |
|
||||||
'tl': 'Timor-Leste', |
|
||||||
'tm': 'Turkmenistan', |
|
||||||
'tn': 'Tunisia', |
|
||||||
'tr': 'Turkey', |
|
||||||
'tw': 'Taiwan, Province of China', |
|
||||||
'tz': 'Tanzania, United Republic of', |
|
||||||
'ua': 'Ukraine', |
|
||||||
'ug': 'Uganda', |
|
||||||
'us': 'United States', |
|
||||||
'uy': 'Uruguay', |
|
||||||
'uz': 'Uzbekistan', |
|
||||||
'va': 'Holy See (Vatican City State)', |
|
||||||
've': 'Venezuela, Bolivarian Republic of', |
|
||||||
'vn': 'Viet Nam', |
|
||||||
'ye': 'Yemen', |
|
||||||
'yt': 'Mayotte', |
|
||||||
'za': 'South Africa', |
|
||||||
'zm': 'Zambia', |
|
||||||
'zw': 'Zimbabwe' |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
EUR = ['be', 'de', 'ie', 'gr', 'es', 'fr', 'it', 'cy', 'lu', 'mt', 'nl', 'at', |
|
||||||
'pt', 'si', 'sk', 'fi', 'ee'] |
|
||||||
|
|
||||||
OECD = ['au', 'at', 'be', 'ca', 'cl', 'cz', 'dk', 'ee', 'fi', 'fr', 'de', 'gr', |
|
||||||
'hu', 'is', 'ie', 'il', 'it', 'jp', 'kr', 'lu', 'mx', 'nl', 'nz', 'no', |
|
||||||
'pl', 'pt', 'sk', 'si', 'es', 'se', 'ch', 'tr', 'gb', 'us'] |
|
||||||
|
|
||||||
NAFTA = ['ca', 'mx', 'us'] |
|
||||||
|
|
||||||
# Continents |
|
||||||
|
|
||||||
ASIA = [ |
|
||||||
'af', 'am', 'az', 'bh', 'bd', 'bt', 'bn', 'mn', 'mm', 'kh', 'cn', 'cy', |
|
||||||
'tl', 'ge', 'in', 'id', 'ir', 'iq', 'il', 'jp', 'jo', 'kz', 'kw', 'kg', |
|
||||||
'la', 'lb', 'my', 'mv', 'mn', 'np', 'kp', 'om', 'pk', 'ps', 'ph', 'ru', |
|
||||||
'sa', 'sg', 'lk', 'kr', 'sy', 'tw', 'tj', 'th', 'tr', 'tm', 'ae', 'uz', |
|
||||||
'vn', 'ye', 'mo', 'hk' |
|
||||||
] |
|
||||||
|
|
||||||
EUROPE = [ |
|
||||||
'al', 'am', 'at', 'az', 'be', 'by', 'ba', 'bg', 'hr', 'cy', 'cz', 'dk', |
|
||||||
'ee', 'fi', 'fr', 'ge', 'de', 'gr', 'hu', 'is', 'ie', 'it', 'kz', 'lv', |
|
||||||
'li', 'lt', 'lu', 'mk', 'mt', 'md', 'mc', 'me', 'nl', 'no', 'pl', 'pt', |
|
||||||
'ro', 'ru', 'sm', 'rs', 'sk', 'si', 'es', 'se', 'ch', 'tr', 'ua', 'gb', |
|
||||||
'va' |
|
||||||
] |
|
||||||
|
|
||||||
AFRICA = [ |
|
||||||
'dz', 'eg', 'ly', 'ma', 'sd', 'tn', 'eh', 'dj', 'er', 'et', 'so', 'bi', |
|
||||||
'ke', 'mg', 'mw', 'mu', 'yt', 'mz', 're', 'rw', 'sc', 'tz', 'ug', 'zm', |
|
||||||
'zw', 'ao', 'cm', 'cf', 'td', 'cd', 'cg', 'gq', 'ga', 'st', 'bw', 'ls', |
|
||||||
'na', 'za', 'sz', 'bj', 'bf', 'cv', 'gm', 'gh', 'gn', 'gw', 'ci', 'lr', |
|
||||||
'ml', 'mr', 'ne', 'ng', 'sh', 'sn', 'sl', 'tg' |
|
||||||
] |
|
||||||
|
|
||||||
NORTH_AMERICA = [ |
|
||||||
'ca', 'mx', 'us', 'gl', 'cu', 'do', 'ht', 'jm', 'pr', 'bz', 'cr', 'sv', |
|
||||||
'gt', 'hn', 'ni', 'pa' |
|
||||||
] |
|
||||||
|
|
||||||
SOUTH_AMERICA = [ |
|
||||||
'ar', 'bo', 'br', 'cl', 'co', 'ec', 'gf', 'gy', 'py', 'pe', 'sr', 'uy', |
|
||||||
've' |
|
||||||
] |
|
||||||
|
|
||||||
OCEANIA = [ |
|
||||||
'au', 'nz', 'pg', 'gu', |
|
||||||
] |
|
||||||
|
|
||||||
ANTARTICA = [ |
|
||||||
'aq' |
|
||||||
] |
|
||||||
|
|
||||||
SUPRANATIONAL = { |
|
||||||
'oecd': OECD, |
|
||||||
'nafta': NAFTA, |
|
||||||
'eur': EUR, |
|
||||||
|
|
||||||
'asia': ASIA, |
|
||||||
'europe': EUROPE, |
|
||||||
'africa': AFRICA, |
|
||||||
'north_america': NORTH_AMERICA, |
|
||||||
'south_america': SOUTH_AMERICA, |
|
||||||
'oceania': OCEANIA, |
|
||||||
'antartica': ANTARTICA |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
def set_countries(countries, clear=False): |
|
||||||
if clear: |
|
||||||
COUNTRIES.clear() |
|
||||||
COUNTRIES.update(countries) |
|
@ -1,87 +0,0 @@ |
|||||||
# -*- coding: utf-8 -*- |
|
||||||
# This file is part of pygal |
|
||||||
# |
|
||||||
# A python svg graph plotting library |
|
||||||
# Copyright © 2012-2014 Kozea |
|
||||||
# |
|
||||||
# This library is free software: you can redistribute it and/or modify it under |
|
||||||
# the terms of the GNU Lesser General Public License as published by the Free |
|
||||||
# Software Foundation, either version 3 of the License, or (at your option) any |
|
||||||
# later version. |
|
||||||
# |
|
||||||
# This library is distributed in the hope that it will be useful, but WITHOUT |
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
|
||||||
# details. |
|
||||||
# |
|
||||||
# You should have received a copy of the GNU Lesser General Public License |
|
||||||
# along with pygal. If not, see <http://www.gnu.org/licenses/>. |
|
||||||
|
|
||||||
from pygal import ( |
|
||||||
Worldmap, SupranationalWorldmap) |
|
||||||
from pygal.i18n import COUNTRIES, SUPRANATIONAL, set_countries |
|
||||||
import operator |
|
||||||
try: |
|
||||||
from functools import reduce |
|
||||||
except ImportError: |
|
||||||
pass |
|
||||||
|
|
||||||
_COUNTRIES = dict(COUNTRIES) |
|
||||||
|
|
||||||
|
|
||||||
def test_worldmap(): |
|
||||||
set_countries(_COUNTRIES, True) |
|
||||||
datas = {} |
|
||||||
for i, ctry in enumerate(COUNTRIES): |
|
||||||
datas[ctry] = i |
|
||||||
|
|
||||||
wmap = Worldmap() |
|
||||||
wmap.add('countries', datas) |
|
||||||
q = wmap.render_pyquery() |
|
||||||
assert len( |
|
||||||
q('.country.color-0') |
|
||||||
) == len(COUNTRIES) |
|
||||||
assert 'France' in q('.country.fr').text() |
|
||||||
|
|
||||||
|
|
||||||
def test_worldmap_i18n(): |
|
||||||
set_countries(_COUNTRIES, True) |
|
||||||
datas = {} |
|
||||||
for i, ctry in enumerate(COUNTRIES): |
|
||||||
datas[ctry] = i |
|
||||||
|
|
||||||
set_countries({'fr': 'Francia'}) |
|
||||||
wmap = Worldmap() |
|
||||||
wmap.add('countries', datas) |
|
||||||
q = wmap.render_pyquery() |
|
||||||
assert len( |
|
||||||
q('.country.color-0') |
|
||||||
) == len(COUNTRIES) |
|
||||||
assert 'Francia' in q('.country.fr').text() |
|
||||||
|
|
||||||
|
|
||||||
def test_worldmap_i18n_clear(): |
|
||||||
set_countries(_COUNTRIES, True) |
|
||||||
wmap = Worldmap() |
|
||||||
wmap.add('countries', dict(fr=12)) |
|
||||||
set_countries({'fr': 'Frankreich'}, clear=True) |
|
||||||
q = wmap.render_pyquery() |
|
||||||
assert len( |
|
||||||
q('.country.color-0') |
|
||||||
) == 1 |
|
||||||
assert 'Frankreich' in q('.country.fr').text() |
|
||||||
|
|
||||||
|
|
||||||
def test_supranationalworldmap(): |
|
||||||
set_countries(_COUNTRIES, True) |
|
||||||
datas = {} |
|
||||||
for i, supra in enumerate(SUPRANATIONAL): |
|
||||||
datas[supra] = i + 1 |
|
||||||
|
|
||||||
wmap = SupranationalWorldmap() |
|
||||||
wmap.add('supra', datas) |
|
||||||
q = wmap.render_pyquery() |
|
||||||
assert len( |
|
||||||
q('.country.color-0') |
|
||||||
) == len( |
|
||||||
reduce(operator.or_, map(set, SUPRANATIONAL.values()))) |
|
Loading…
Reference in new issue