16 dynamic graphs: a Python visualization tool that is easy to use

Generally speaking, when it comes to data visualization, Python readers may think of matplotlib module or seaborn module for the first time, while when it comes to drawing dynamic charts, they think more of Plotly or pyechards.
Today, I'd like to introduce another module for drawing dynamic charts, which is very convenient to use, and the charts drawn are very exquisite and beautiful. It's called pygal. Compared with seaborn and other commonly used modules, the advantages of this module are:

  • Highly customizable and easy to use

  • Charts are highly interactive

  • Images can be exported in SVG format (vector graphics)

  • Highly integrated with Django, Flask and other Web frameworks

Therefore, the pygal module editor thinks it's worth talking about. We'll talk about these contents:

  • pygal module installation
  • Drawing of histogram
  • Drawing of line chart
  • Pie chart drawing
  • Radar mapping
  • Box diagram
  • Dashboard
  • Tree diagram
  • Map

Module installation

The module installation is very simple, which can be realized through pip install,

pip install pygal

Of course, if domestic small partners feel that the download speed is slow, they can also speed up by adding a third-party image

pip install -i http://pypi.douban.com/simple/ pygal

Histogram

Let's look at the drawing of histogram. First, let's look at the example of single column histogram

view = pygal.Bar()
#Chart name
view.title = 'Histogram'
#Add data
view.add('data', [1,3,5,7,9,11])
#View in browser
#view.render_in_browser()
view.render_to_file('bar.svg')

output

We can use render_to_file() method, or render_ in_ The browser () method is used to view in the browser

Let's look at the drawing of multi column columnar graph. The code is as follows

view.add('Odd number', [1,3,5,7,9,11])
view.add('even numbers', [2,4,6,8,10,12])

output

If we want to look at the bar chart horizontally, replace a small part of the above code with

view = pygal.HorizontalBar()

output

If we want a stacked histogram, we need to replace a small part of the above code with

view = pygal.HorizontalStackedBar()

output

Line chart

The drawing of line chart is basically consistent with the drawing of histogram above. Let's look at the code directly

view = pygal.HorizontalStackedBar()

output

picture

It is also consistent with the code logic of the bar chart above. There are also stacked line charts in the line chart. Only a part of the above code needs to be replaced with

view = pygal.StackedLine(fill=True)

Pie chart

Similarly, the drawing of pie chart is also similar to the code logic

view = pygal.Pie()
#Chart name
view.title = 'Pie chart'
#Add data
view.add('A', 23)
view.add('B', 40)
view.add('C', 15)

view.render_to_file('pie.svg')

output

At the same time, we can also draw a doughnut and empty out a piece in the center of the pie chart. The code is roughly the same, but we need to replace a small part of the above with

#Sets the radius of the hollow circle
view = pygal.Pie(inner_radius=0.4)

output

When we have more than one number in each class, we can draw a multi-level pie chart. The code is as follows

view = pygal.Pie()
#Chart name
view.title = 'Multilevel pie chart'
#Add data
view.add('A', [20, 25, 30, 45])
view.add('B', [15, 19, 25, 50])
view.add('C', [18, 22, 28, 35])

view.render_to_file('pie_multi.svg')

output

Radar chart

Radar chart can help us analyze data from multiple dimensions. For example, when we analyze athletes' sports ability, we will look at it from multiple dimensions. At this time, radar chart becomes very useful. The code is as follows

radar_chart = pygal.Radar()
radar_chart.title = 'NBA Competition among players'
radar_chart.x_labels = ['score', 'defense', 'Assists', 'an error', 'backboard']
radar_chart.add('Curry', [70, 98, 96, 85, 97])
radar_chart.add('James', [60, 95, 50, 75, 99])
radar_chart.add('Durant', [94, 45, 88, 91, 98])
radar_chart.render_to_file('radar_nba.svg')

output

Of course, the above data are all made up. Don't spray me if you like NBA readers or readers who like the balls above

Box diagram

Box chart can quickly help us understand the distribution of data and check whether there are extreme values. The pygal module also provides the method of drawing box diagram. The code is as follows

box_plot = pygal.Box()
box_plot.title = 'Usage by browser'
box_plot.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])
box_plot.add('Firefox', [7512, 8099, 11700, 2651, 6361, 1044, 8502, 9450])
box_plot.add('360 Security guard', [3472, 2933, 4203, 5510, 5810, 1828, 9013, 4669])
box_plot.add('Edge', [4310, 4109, 5935, 7902, 14404, 13608, 34004, 10210])
box_plot.render_to_file("box.svg")

output

Dashboard

The dashboard can help us quantify the quality of indicators. The code is as follows

gauge_chart = pygal.Gauge(human_readable=True)
gauge_chart.title = 'Performance differences between different browsers'
gauge_chart.range = [0, 10000]
gauge_chart.add('Chrome', 8212)
gauge_chart.add('Firefox', 8099)
gauge_chart.add('360 Security guard', 2933)
gauge_chart.add('Edge', 2530)
gauge_chart.render_to_file('gauge_1.svg')

output

Thermodynamic diagram

The thermal map can more intuitively observe the data distribution in each area. The code is as follows

treemap = pygal.Treemap()
treemap.title = 'Binary TreeMap'
treemap.add('A', [12, 15, 12, 40, 2, 10, 10, 13, 12, 13, 40, None, 19])
treemap.add('B', [4, 2, 5, 10, 30, 4, 2, 7, 4, -10, None, 8, 30, 10])
treemap.add('C', [3, 8, 3, 3, 5, 15, 3, 5, 4, 12])
treemap.add('D', [23, 18])
treemap.add('E', [11, 2, 1, 12, 3, 13, 1, 2, 13,
      14, 3, 1, 2, 10, 1, 10, 12, 1])
treemap.add('F', [31])
treemap.add('G', [15, 9.3, 8.1, 12, 4, 34, 2])
treemap.add('H', [12, 13, 3])
treemap.render_in_browser()

output

Map

First, let's look at the drawing of the world map. Before that, we have to download the plug-ins needed to draw the whole world map

pip install pygal_maps_world

The code is as follows

worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Some countries'
worldmap_chart.add('A countries', ['Abbreviation of country name'])
worldmap_chart.add('B countries', ['Abbreviation of country name'])
worldmap_chart.add('C countries', ['Abbreviation of country name'])
worldmap_chart.render_in_browser()

output

We can also draw maps according to the counts of different countries, such as the number of deaths from major diseases in different countries. The codes are as follows

worldmap_chart = pygal.maps.world.World()
worldmap_chart.title = 'Minimum deaths by capital punishement (source: Amnesty International)'
worldmap_chart.add('In 2012', {
  'Abbreviation of country name': quantity,
  'Abbreviation of country name': quantity,
  .....
})
worldmap_chart.render_in_browser()

output

We can also draw a world map based on five continents. The code is as follows

worldmap_continent = pygal.maps.world.SupranationalWorld()
worldmap_continent.add('Asia', [('asia', 1)])
worldmap_continent.add('Europe', [('europe', 1)])
worldmap_continent.add('Africa', [('africa', 1)])
worldmap_continent.add('North america', [('north_america', 1)])
worldmap_continent.add('South america', [('south_america', 1)])
worldmap_continent.add('Oceania', [('oceania', 1)])
worldmap_continent.add('Antartica', [('antartica', 1)])
worldmap_continent.render_in_browser()

output

Of course, we can also draw a country as a map. For example, we take France as an example. First, we need to download the plug-in that we rely on to draw a map of a single country

pip install pygal_maps_fr

The code is as follows

fr_chart = pygal.maps.fr.Regions()
fr_chart.title = 'Regional map of France'
fr_chart.add('Area name', ['quantity'])
fr_chart.render_in_browser()

output

However, when it comes to drawing a map of a country, the number of countries supported is not large. Only France and Switzerland are listed on the official website. The plug-ins of other countries can be downloaded. Xiaobian tried to download them, but they can't be downloaded. Later, we'll wait for the official update and optimization.

Keywords: Python Programming Back-end Programmer

Added by mattee on Thu, 30 Dec 2021 00:52:21 +0200