{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# pygal\n", "\n", "[pygal](http://www.pygal.org/en/stable/) is one if the most mature and complete library using javascript."]}, {"cell_type": "markdown", "metadata": {}, "source": ["[documentation](http://www.pygal.org/en/stable/) [source](https://github.com/Kozea/pygal) [installation](http://www.pygal.org/en/stable/installing.html) [tutorial](http://www.pygal.org/en/stable/documentation/first_steps.html) [gallery](http://www.pygal.org/en/stable/)"]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## example"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["import pygal\n", "bar_chart = pygal.Bar(height=300)\n", "bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])\n", "bar_chart.add('Padovan', [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12])\n", "svg = bar_chart.render()"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"image/svg+xml": ["Pygal0010102020303040405050027.989510489510486255.0183.96853146853148252.727272727272751139.94755244755243252.727272727272752195.92657342657338250.454545454545443251.9055944055944248.18181818181825307.88461538461536243.636363636363638363.8636363636364236.818181818181813419.8426573426573225.4545454545454421475.8216783216783207.2727272727272834531.8006993006993177.7272727272727555587.7797202797201130.0152.62027972027971252.727272727272751108.59930069930071252.727272727272751164.57832167832166252.727272727272752220.55734265734262250.454545454545442276.53636363636366250.454545454545443332.51538461538456248.18181818181824388.4944055944056245.90909090909095444.4734265734265243.636363636363637500.4524475524475239.09090909090919556.4314685314686234.5454545454545612612.4104895104894227.72727272727275FibonacciPadovan"], "text/plain": [""]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["from IPython.display import SVG\n", "SVG(svg)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Style of the graph"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"data": {"image/svg+xml": ["Pygal0010102020303040405050027.989510489510486255.0183.96853146853148252.727272727272751139.94755244755243252.727272727272752195.92657342657338250.454545454545443251.9055944055944248.18181818181825307.88461538461536243.636363636363638363.8636363636364236.818181818181813419.8426573426573225.4545454545454421475.8216783216783207.2727272727272834531.8006993006993177.7272727272727555587.7797202797201130.0152.62027972027971252.727272727272751108.59930069930071252.727272727272751164.57832167832166252.727272727272752220.55734265734262250.454545454545442276.53636363636366250.454545454545443332.51538461538456248.18181818181824388.4944055944056245.90909090909095444.4734265734265243.636363636363637500.4524475524475239.09090909090919556.4314685314686234.5454545454545612612.4104895104894227.72727272727275FibonacciPadovan"], "text/plain": [""]}, "execution_count": 5, "metadata": {}, "output_type": "execute_result"}], "source": ["from pygal.style import DarkStyle\n", "bar_chart = pygal.Bar(style=DarkStyle, height=300)\n", "bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])\n", "bar_chart.add('Padovan', [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12])\n", "svg = bar_chart.render()\n", "SVG(svg)"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"data": {"image/svg+xml": ["Population by department\n", " \n", " \n", " \n", " Val-d'Oise: 118036500\n", " \n", " \n", " Val-de-Marne: 133370200\n", " \n", " \n", " Seine-Saint-Denis: 152992800\n", " \n", " \n", " Hauts-de-Seine: 158162800\n", " \n", " \n", " Essonne: 122519100\n", " \n", " \n", " Territoire de Belfort: 14334800\n", " \n", " \n", " Yonne: 34246300\n", " \n", " \n", " Vosges: 37883000\n", " \n", " \n", " Haute-Vienne: 37605800\n", " \n", " \n", " Vienne: 42844700\n", " \n", " \n", " Vend\u00e9e: 64165700\n", " \n", " \n", " Vaucluse: 54663000\n", " \n", " \n", " Var: 101273500\n", " \n", " \n", " Tarn-et-Garonne: 24454500\n", " \n", " \n", " Tarn: 37767500\n", " \n", " \n", " Somme: 57121100\n", " \n", " \n", " Deux-S\u00e8vres: 37093900\n", " \n", " \n", " Yvelines: 141363500\n", " \n", " \n", " Seine-et-Marne: 133842700\n", " \n", " \n", " Seine-Maritime: 125128200\n", " \n", " \n", " Paris: 224997500\n", " \n", " \n", " Haute-Savoie: 74699400\n", " \n", " \n", " Savoie: 41894900\n", " \n", " \n", " Sarthe: 56571800\n", " \n", " \n", " Sa\u00f4ne-et-Loire: 55599900\n", " \n", " \n", " Haute-Sa\u00f4ne: 23969500\n", " \n", " \n", " Rh\u00f4ne: 174423600\n", " \n", " \n", " Haut-Rhin: 75305600\n", " \n", " \n", " Bas-Rhin: 109926900\n", " \n", " \n", " Pyr\u00e9n\u00e9es-Orientales: 45253000\n", " \n", " \n", " Hautes-Pyr\u00e9n\u00e9es: 22922800\n", " \n", " \n", " Pyr\u00e9n\u00e9es-Atlantiques: 65660800\n", " \n", " \n", " Puy-de-D\u00f4me: 63546900\n", " \n", " \n", " Pas-de-Calais: 146280700\n", " \n", " \n", " Orne: 29089100\n", " \n", " \n", " Oise: 80564200\n", " \n", " \n", " Nord: 257920800\n", " \n", " \n", " Ni\u00e8vre: 21834100\n", " \n", " \n", " Moselle: 104514600\n", " \n", " \n", " Morbihan: 72708300\n", " \n", " \n", " Meuse: 19355700\n", " \n", " \n", " Meurthe-et-Moselle: 73312400\n", " \n", " \n", " Mayenne: 30703100\n", " \n", " \n", " Haute-Marne: 18237500\n", " \n", " \n", " Marne: 56657100\n", " \n", " \n", " Manche: 49953100\n", " \n", " \n", " Maine-et-Loire: 79034300\n", " \n", " \n", " Loz\u00e8re: 7715600\n", " \n", " \n", " Lot-et-Garonne: 33086600\n", " \n", " \n", " Lot: 17475400\n", " \n", " \n", " Loiret: 65958700\n", " \n", " \n", " Loire-Atlantique: 129636400\n", " \n", " \n", " Haute-Loire: 22490700\n", " \n", " \n", " Loire: 74905300\n", " \n", " \n", " Loir-et-Cher: 33128000\n", " \n", " \n", " Landes: 38792900\n", " \n", " \n", " Jura: 26129400\n", " \n", " \n", " Is\u00e8re: 121521200\n", " \n", " \n", " Indre-et-Loire: 59368300\n", " \n", " \n", " Indre: 23017500\n", " \n", " \n", " Ille-et-Vilaine: 99643900\n", " \n", " \n", " H\u00e9rault: 106203600\n", " \n", " \n", " Gironde: 146366200\n", " \n", " \n", " Gers: 18889300\n", " \n", " \n", " Haute-Garonne: 126022600\n", " \n", " \n", " Gard: 71835700\n", " \n", " \n", " Finist\u00e8re: 89987000\n", " \n", " \n", " Eure-et-Loir: 43041600\n", " \n", " \n", " Eure: 58811100\n", " \n", " \n", " Dr\u00f4me: 48799300\n", " \n", " \n", " Doubs: 52910300\n", " \n", " \n", " Dordogne: 41516800\n", " \n", " \n", " Creuse: 12256000\n", " \n", " \n", " C\u00f4tes-d'Armor: 59437500\n", " \n", " \n", " C\u00f4te-d'Or: 52593100\n", " \n", " \n", " Haute-Corse: 16864000\n", " \n", " \n", " Corse-du-Sud: 14584600\n", " \n", " \n", " Corr\u00e8ze: 24245400\n", " \n", " \n", " Cher: 31169400\n", " \n", " \n", " Charente-Maritime: 62568200\n", " \n", " \n", " Charente: 35270500\n", " \n", " \n", " Cantal: 14757700\n", " \n", " \n", " Calvados: 68526200\n", " \n", " \n", " Bouches-du-Rh\u00f4ne: 197589600\n", " \n", " \n", " Aveyron: 27581300\n", " \n", " \n", " Aude: 35996700\n", " \n", " \n", " Aube: 30399700\n", " \n", " \n", " Ari\u00e8ge: 15228600\n", " \n", " \n", " Ardennes: 28311000\n", " \n", " \n", " Ard\u00e8che: 31727700\n", " \n", " \n", " Alpes-Maritimes: 108124400\n", " \n", " \n", " Hautes-Alpes: 13860500\n", " \n", " \n", " Alpes-de-Haute-Provence: 16095900\n", " \n", " \n", " Allier: 34272900\n", " \n", " \n", " Aisne: 54130200\n", " \n", " \n", " Ain: 60382700\n", " \n", "\n", " \n", " \n", " \n", " Val-de-Marne: 133370200\n", " \n", " \n", " Seine-Saint-Denis: 152992800\n", " \n", " \n", " Hauts-de-Seine: 158162800\n", " \n", " \n", " Paris: 224997500\n", " \n", "\n", " \n", " \n", " \n", " Mayotte: 21264500\n", " \n", " \n", " \n", " \n", " \n", " R\u00e9union: 82858100\n", " \n", " \n", " Guyane: 23754900\n", " \n", " \n", " Martinique: 39229100\n", " \n", " \n", " Guadeloupe: 40463500\n", " \n", "Population by departmentIn 2011"], "text/plain": [""]}, "execution_count": 6, "metadata": {}, "output_type": "execute_result"}], "source": ["from IPython.display import SVG\n", "import pygal\n", "fr_chart = pygal.maps.fr.Departments(human_readable=True, height=300)\n", "fr_chart.title = 'Population by department'\n", "fr_chart.add('In 2011', {\n", " '01': 603827, '02': 541302, '03': 342729, '04': 160959, '05': 138605, '06': 1081244, \n", " '07': 317277, '08': 283110, '09': 152286, '10': 303997, '11': 359967, '12': 275813, \n", " '13': 1975896, '14': 685262, '15': 147577, '16': 352705, '17': 625682, '18': 311694, \n", " '19': 242454, '2A': 145846, '2B': 168640, '21': 525931, '22': 594375, '23': 122560, '24': 415168, \n", " '25': 529103, '26': 487993, '27': 588111, '28': 430416, '29': 899870, '30': 718357, '31': 1260226, \n", " '32': 188893, '33': 1463662, '34': 1062036, '35': 996439, '36': 230175, '37': 593683, '38': 1215212, \n", " '39': 261294, '40': 387929, '41': 331280, '42': 749053, '43': 224907, '44': 1296364, '45': 659587, \n", " '46': 174754, '47': 330866, '48': 77156, '49': 790343, '50': 499531, '51': 566571, '52': 182375, \n", " '53': 307031, '54': 733124, '55': 193557, '56': 727083, '57': 1045146, '58': 218341, '59': 2579208, \n", " '60': 805642, '61': 290891, '62': 1462807, '63': 635469, '64': 656608, '65': 229228, \n", " '66': 452530, '67': 1099269, '68': 753056, '69': 1744236, '70': 239695, '71': 555999, \n", " '72': 565718, '73': 418949, '74': 746994, '75': 2249975, '76': 1251282, '77': 1338427, \n", " '78': 1413635, '79': 370939, '80': 571211, '81': 377675, '82': 244545, '83': 1012735, \n", " '84': 546630, '85': 641657, '86': 428447, '87': 376058, '88': 378830, '89': 342463, \n", " '90': 143348, '91': 1225191, '92': 1581628, '93': 1529928, '94': 1333702, '95': 1180365, \n", " '971': 404635, '972': 392291, '973': 237549, '974': 828581, '976': 212645\n", "})\n", "svg = fr_chart.render()\n", "SVG(svg)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Trick to make pygal reactive"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", "Population by department\n", " \n", " \n", " \n", " Val-d'Oise: 118036500\n", " \n", " \n", " Val-de-Marne: 133370200\n", " \n", " \n", " Seine-Saint-Denis: 152992800\n", " \n", " \n", " Hauts-de-Seine: 158162800\n", " \n", " \n", " Essonne: 122519100\n", " \n", " \n", " Territoire de Belfort: 14334800\n", " \n", " \n", " Yonne: 34246300\n", " \n", " \n", " Vosges: 37883000\n", " \n", " \n", " Haute-Vienne: 37605800\n", " \n", " \n", " Vienne: 42844700\n", " \n", " \n", " Vend\u00e9e: 64165700\n", " \n", " \n", " Vaucluse: 54663000\n", " \n", " \n", " Var: 101273500\n", " \n", " \n", " Tarn-et-Garonne: 24454500\n", " \n", " \n", " Tarn: 37767500\n", " \n", " \n", " Somme: 57121100\n", " \n", " \n", " Deux-S\u00e8vres: 37093900\n", " \n", " \n", " Yvelines: 141363500\n", " \n", " \n", " Seine-et-Marne: 133842700\n", " \n", " \n", " Seine-Maritime: 125128200\n", " \n", " \n", " Paris: 224997500\n", " \n", " \n", " Haute-Savoie: 74699400\n", " \n", " \n", " Savoie: 41894900\n", " \n", " \n", " Sarthe: 56571800\n", " \n", " \n", " Sa\u00f4ne-et-Loire: 55599900\n", " \n", " \n", " Haute-Sa\u00f4ne: 23969500\n", " \n", " \n", " Rh\u00f4ne: 174423600\n", " \n", " \n", " Haut-Rhin: 75305600\n", " \n", " \n", " Bas-Rhin: 109926900\n", " \n", " \n", " Pyr\u00e9n\u00e9es-Orientales: 45253000\n", " \n", " \n", " Hautes-Pyr\u00e9n\u00e9es: 22922800\n", " \n", " \n", " Pyr\u00e9n\u00e9es-Atlantiques: 65660800\n", " \n", " \n", " Puy-de-D\u00f4me: 63546900\n", " \n", " \n", " Pas-de-Calais: 146280700\n", " \n", " \n", " Orne: 29089100\n", " \n", " \n", " Oise: 80564200\n", " \n", " \n", " Nord: 257920800\n", " \n", " \n", " Ni\u00e8vre: 21834100\n", " \n", " \n", " Moselle: 104514600\n", " \n", " \n", " Morbihan: 72708300\n", " \n", " \n", " Meuse: 19355700\n", " \n", " \n", " Meurthe-et-Moselle: 73312400\n", " \n", " \n", " Mayenne: 30703100\n", " \n", " \n", " Haute-Marne: 18237500\n", " \n", " \n", " Marne: 56657100\n", " \n", " \n", " Manche: 49953100\n", " \n", " \n", " Maine-et-Loire: 79034300\n", " \n", " \n", " Loz\u00e8re: 7715600\n", " \n", " \n", " Lot-et-Garonne: 33086600\n", " \n", " \n", " Lot: 17475400\n", " \n", " \n", " Loiret: 65958700\n", " \n", " \n", " Loire-Atlantique: 129636400\n", " \n", " \n", " Haute-Loire: 22490700\n", " \n", " \n", " Loire: 74905300\n", " \n", " \n", " Loir-et-Cher: 33128000\n", " \n", " \n", " Landes: 38792900\n", " \n", " \n", " Jura: 26129400\n", " \n", " \n", " Is\u00e8re: 121521200\n", " \n", " \n", " Indre-et-Loire: 59368300\n", " \n", " \n", " Indre: 23017500\n", " \n", " \n", " Ille-et-Vilaine: 99643900\n", " \n", " \n", " H\u00e9rault: 106203600\n", " \n", " \n", " Gironde: 146366200\n", " \n", " \n", " Gers: 18889300\n", " \n", " \n", " Haute-Garonne: 126022600\n", " \n", " \n", " Gard: 71835700\n", " \n", " \n", " Finist\u00e8re: 89987000\n", " \n", " \n", " Eure-et-Loir: 43041600\n", " \n", " \n", " Eure: 58811100\n", " \n", " \n", " Dr\u00f4me: 48799300\n", " \n", " \n", " Doubs: 52910300\n", " \n", " \n", " Dordogne: 41516800\n", " \n", " \n", " Creuse: 12256000\n", " \n", " \n", " C\u00f4tes-d'Armor: 59437500\n", " \n", " \n", " C\u00f4te-d'Or: 52593100\n", " \n", " \n", " Haute-Corse: 16864000\n", " \n", " \n", " Corse-du-Sud: 14584600\n", " \n", " \n", " Corr\u00e8ze: 24245400\n", " \n", " \n", " Cher: 31169400\n", " \n", " \n", " Charente-Maritime: 62568200\n", " \n", " \n", " Charente: 35270500\n", " \n", " \n", " Cantal: 14757700\n", " \n", " \n", " Calvados: 68526200\n", " \n", " \n", " Bouches-du-Rh\u00f4ne: 197589600\n", " \n", " \n", " Aveyron: 27581300\n", " \n", " \n", " Aude: 35996700\n", " \n", " \n", " Aube: 30399700\n", " \n", " \n", " Ari\u00e8ge: 15228600\n", " \n", " \n", " Ardennes: 28311000\n", " \n", " \n", " Ard\u00e8che: 31727700\n", " \n", " \n", " Alpes-Maritimes: 108124400\n", " \n", " \n", " Hautes-Alpes: 13860500\n", " \n", " \n", " Alpes-de-Haute-Provence: 16095900\n", " \n", " \n", " Allier: 34272900\n", " \n", " \n", " Aisne: 54130200\n", " \n", " \n", " Ain: 60382700\n", " \n", "\n", " \n", " \n", " \n", " Val-de-Marne: 133370200\n", " \n", " \n", " Seine-Saint-Denis: 152992800\n", " \n", " \n", " Hauts-de-Seine: 158162800\n", " \n", " \n", " Paris: 224997500\n", " \n", "\n", " \n", " \n", " \n", " Mayotte: 21264500\n", " \n", " \n", " \n", " \n", " \n", " R\u00e9union: 82858100\n", " \n", " \n", " Guyane: 23754900\n", " \n", " \n", " Martinique: 39229100\n", " \n", " \n", " Guadeloupe: 40463500\n", " \n", "Population by departmentIn 2011\n", "
\n", " \n", "\n"], "text/plain": [""]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["html_pygal = \"\"\"\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", "
\n", " {0}\n", "
\n", " \n", "\n", "\"\"\"\n", "\n", "from IPython.display import HTML\n", "HTML(html_pygal.format(svg.decode(\"utf-8\")))"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4"}}, "nbformat": 4, "nbformat_minor": 2}