首頁>技術>

Python有很多優秀的視覺化庫,其中有名的像matplotlib、seaborn、plotly,可以繪製出各式絢麗的圖表。

這次介紹一個不那麼廣為人知但依然優秀的視覺化庫-Pygal

官網介紹說Pygal是一個性感的Python製表工具,提供了14種圖表型別,可以輕鬆定製出版級別的互動式圖表。

相比較seaborn等明星庫,Pygal有哪些值得一說的優點呢?

高度可定製,而且用法簡單;圖表可互動性強;影象可匯出SVG格式(向量圖形);與Django、Flask等Web框架高度整合;Pygal支援哪些圖表?

Pygal目前支援的圖表有折線圖、點圖、柱狀圖、直方圖、餅圖、雷達圖、箱圖、氣泡圖、漏斗圖、圓環圖、儀表板、漏斗圖、熱力圖、地圖。

既可以在瀏覽器中直接檢視圖表,或整合到web中,也可以匯出圖表。

可以匯出的格式有:SVG、PNG、Etree、64位URI

Pygal預設在jupyter notebook不顯示,需要儲存問svg、png等格式,瀏覽器開啟檢視,為了便於展示,做了如下設定可在jupyter notebook中展示。

import pygal #設定pygal與jupyter notebook互動from IPython.display import display, HTML base_html = """<!DOCTYPE html><html>  <head>  <script type="text/javascript" src="http://kozea.github.com/pygal.js/javascripts/svg.jquery.js"></script>  <script type="text/javascript" src="https://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.min.js""></script>  </head>  <body>    <figure>      {rendered_chart}    </figure>  </body></html>"""
安裝並匯入Pygal

使用pip或者conda進行安裝,在命令列輸入:

pip install pygal

幾秒鐘便可安裝完成。

安裝好後,匯入Pygal:

import pygal      

這裡用的是Jupyter Notebook環境,好了,接下來正式繪圖。

繪圖步驟

Pygal的用法非常簡單,主要分三步:

生成圖表物件匯入資料匯出影象

這裡簡單繪製一個柱狀圖:

# 匯入pygal庫import pygal  # 建立柱狀圖物件bar_chart = pygal.Bar() # 圖表命名bar_chart.title = 'NBA歷史得分前五球星資料'# 新增資料bar_chart.add('賈巴爾', 38387) bar_chart.add('馬龍', 36928) bar_chart.add('詹姆斯', 34384) bar_chart.add('科比', 33643) bar_chart.add('喬丹', 32292) # 在瀏覽器中檢視bar_chart.render_in_browser()# 匯出為向量圖形bar_chart.render_to_file('NBA.svg') 
常見圖形折線圖
line_chart = pygal.Line()line_chart.title = 'Browser usage evolution (in %)'# 新增x軸標籤line_chart.x_labels = map(str, range(2002, 2013))# 傳入資料line_chart.add('Firefox', [None, None,    0, 16.6,   25,   31, 36.4, 45.5, 46.3, 42.8, 37.1])line_chart.add('Chrome',  [None, None, None, None, None, None,    0,  3.9, 10.8, 23.8, 35.3])line_chart.add('IE',      [85.8, 84.6, 84.7, 74.5,   66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])line_chart.add('Others',  [14.2, 15.4, 15.3,  8.9,    9, 10.4,  8.9,  5.8,  6.7,  6.8,  7.5])#圖片渲染HTML(base_html.format(rendered_chart=line_chart.render(is_unicode=True)))
柱狀圖
line_chart = pygal.HorizontalBar()line_chart.title = 'Browser usage in February 2012 (in %)'line_chart.add('IE', 19.5)line_chart.add('Firefox', 36.6)line_chart.add('Chrome', 36.3)line_chart.add('Safari', 4.5)line_chart.add('Opera', 2.3)#圖片渲染HTML(base_html.format(rendered_chart=line_chart.render(is_unicode=True)))
餅圖
pie_chart = pygal.Pie()pie_chart.title = 'Browser usage by version in February 2012 (in %)'pie_chart.add('IE', [5.7, 10.2, 2.6, 1])pie_chart.add('Firefox', [.6, 16.8, 7.4, 2.2, 1.2, 1, 1, 1.1, 4.3, 1])pie_chart.add('Chrome', [.3, .9, 17.1, 15.3, .6, .5, 1.6])pie_chart.add('Safari', [4.4, .1])pie_chart.add('Opera', [.1, 1.6, .1, .5])#圖片渲染HTML(base_html.format(rendered_chart=pie_chart.render(is_unicode=True)))
環形圖
pie_chart = pygal.Pie(inner_radius=.4)pie_chart.title = 'Browser usage in February 2012 (in %)'pie_chart.add('IE', 19.5)pie_chart.add('Firefox', 36.6)pie_chart.add('Chrome', 36.3)pie_chart.add('Safari', 4.5)pie_chart.add('Opera', 2.3)#圖片渲染HTML(base_html.format(rendered_chart=pie_chart.render(is_unicode=True)))
雷達圖
radar_chart = pygal.Radar()radar_chart.title = 'V8 benchmark results'radar_chart.x_labels = ['Richards', 'DeltaBlue', 'Crypto', 'RayTrace', 'EarleyBoyer', 'RegExp', 'Splay', 'NavierStokes']radar_chart.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])radar_chart.add('Firefox', [7473, 8099, 11700, 2651, 6361, 1044, 3797, 9450])radar_chart.add('Opera', [3472, 2933, 4203, 5229, 5810, 1828, 9013, 4669])radar_chart.add('IE', [43, 41, 59, 79, 144, 136, 34, 102])radar_chart.render()#圖片渲染HTML(base_html.format(rendered_chart=radar_chart.render(is_unicode=True)))
箱圖
box_plot = pygal.Box()box_plot.title = 'V8 benchmark results'box_plot.add('Chrome', [6395, 8212, 7520, 7218, 12464, 1660, 2123, 8607])box_plot.add('Firefox', [7473, 8099, 11700, 2651, 6361, 1044, 3797, 9450])box_plot.add('Opera', [3472, 2933, 4203, 5229, 5810, 1828, 9013, 4669])box_plot.add('IE', [43, 41, 59, 79, 144, 136, 34, 102])#圖片渲染HTML(base_html.format(rendered_chart=box_plot.render(is_unicode=True)))
環形圖
gauge = pygal.SolidGauge(inner_radius=0.70)percent_formatter = lambda x: '{:.10g}%'.format(x)dollar_formatter = lambda x: '{:.10g}$'.format(x)gauge.value_formatter = percent_formattergauge.add('Series 1', [{'value': 225000, 'max_value': 1275000}],          formatter=dollar_formatter)gauge.add('Series 2', [{'value': 110, 'max_value': 100}])gauge.add('Series 3', [{'value': 3}])gauge.add(    'Series 4', [        {'value': 51, 'max_value': 100},        {'value': 12, 'max_value': 100}])gauge.add('Series 5', [{'value': 79, 'max_value': 100}])gauge.add('Series 6', 99)gauge.add('Series 7', [{'value': 100, 'max_value': 100}])#圖片渲染HTML(base_html.format(rendered_chart=gauge.render(is_unicode=True)))
熱力圖
treemap = pygal.Treemap()treemap.title = 'Binary TreeMap'treemap.add('A', [2, 1, 12, 4, 2, 1, 1, 3, 12, 3, 4, None, 9])treemap.add('B', [4, 2, 5, 10, 3, 4, 2, 7, 4, -10, None, 8, 3, 1])treemap.add('C', [3, 8, 3, 3, 5, 3, 3, 5, 4, 12])treemap.add('D', [23, 18])treemap.add('E', [1, 2, 1, 2, 3, 3, 1, 2, 3,      4, 3, 1, 2, 1, 1, 1, 1, 1])treemap.add('F', [31])treemap.add('G', [5, 9.3, 8.1, 12, 4, 3, 2])treemap.add('H', [12, 3, 3])#圖片渲染HTML(base_html.format(rendered_chart=treemap.render(is_unicode=True)))
地圖
# 使用地圖需先安裝外掛pygal_maps_world# 在命令列輸入:pip install pygal_maps_worldworldmap_chart = pygal.maps.world.World()worldmap_chart.title = 'Some countries'worldmap_chart.add('F countries', ['fr', 'fi'])worldmap_chart.add('M countries', ['ma', 'mc', 'md', 'me', 'mg',                                   'mk', 'ml', 'mm', 'mn', 'mo',                                   'mr', 'mt', 'mu', 'mv', 'mw',                                   'mx', 'my', 'mz'])worldmap_chart.add('U countries', ['ua', 'ug', 'us', 'uy', 'uz'])[圖片上傳中...(image.png-863dc1-1609602511392-0)]#圖片渲染HTML(base_html.format(rendered_chart=worldmap_chart.render(is_unicode=True)))

16
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 怎樣學習,才能真正讓自己學到?