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