成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python下使用Altair數據制圖

開發 后端
Altair 作為一個 Python 數據制圖庫,提供了優雅的接口及自有的繪圖語言。

[[336583]]

Altair 作為一個 Python 數據制圖庫,提供了優雅的接口及自有的繪圖語言。

Python 中的 繪圖庫 提供了呈現數據的多種方式,可以滿足你不同的偏好,如靈活性、布局、易用性,或者特殊的風格。

和其它方式相比,我發現,Altair 提供的是一種不同的解決方案,且總體而言使用起來更為簡單。得益于聲明式的繪圖語言 Vega,Altair 擁有一套優雅的接口,可以直接定義要繪的圖應該是什么樣子,而不是通過寫一大堆循環和條件判斷去一步步構建。

繪圖流程

我通過繪制同一個多柱狀圖比較了多個 Python 繪圖庫的差異。正式開始之前,你需要將你的 Python 環境調整到能運行下面代碼的狀態。具體就是:

  • 安裝最新版的 Python( Linux、Mac 和 Windows 系統下的安裝方法)
  • 確認該版本 Python 可以運行本教程所使用的庫

演示用數據可從網絡下載,并且可以用 pandas 直接導入:

  1. import pandas as pd
  2. df = pd.read_csv('https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv')

準備開始吧。為了做個比較,先看下面這個用 Matplotlib 做的圖:

 

Matplotlib UK election results

使用 Matplotlib 需要 16 行代碼,圖柱的位置需要自己計算。

使用 Altair 繪制相似的圖,代碼如下:

  1.     import altair as alt
  2.  
  3.     chart = alt.Chart(df).mark_bar().encode(
  4.         x='party',
  5.         y='seats',
  6.         column='year',
  7.         color='party',
  8.     )
  9.  
  10.     chart.save('altair-elections.html')

真是簡潔多了!與 Seaborn 類似,Altair 所用數據的組織形式是每個變量一列(即 數據列 )。這種方式下可以將每個變量映射到圖的一個屬性上 —— Altair 稱之為“通道”。在上例中,我們期望每個 “黨派” 在 x 軸上顯示為一組圖柱, 其 “席位” 顯示在 y 軸,且將圖柱按照 “年份” 分開為 “列”。我們還想根據 “黨派” 給圖柱使用不同的 “顏色”。用語言表述需求的話就是上面這個樣子,而這也正是代碼所要表述的!

現在把圖畫出來:

 

Altair plot with default styling

調整樣式

這和我們期待的效果有點接近了。與 Matplotlib 方案相比,主要區別在于 Altair 方案中,每個 year 組顯示的時候,內部之間都有個小空白 —— 這不是問題,這只是 Altair 多柱狀圖顯示的一個特性。

所以說呢,還需要對顯示樣式再做一些改進。

非整形數據

兩個不是整數的年份名稱(Feb 1974 和 Oct 1974)顯示為 NaN 了。這可以通過將年份數值 year 轉換為字符串來解決:

  1.     df['year'] = df['year'].astype(str)

指定數據排序方法

還需要讓 Altair 知道如何對數據進行排序。Altair 允許通過傳給它一個 Column 對象,來設定 Column 通道的更多細節。現在讓 Altair 按照數據在數據集中出現的順序排列:

  1.     chart = alt.Chart(df).mark_bar().encode(
  2.         # ...
  3.         column=alt.Column('year', sort=list(df['year']), title=None),
  4.         # ...
  5.     )

移除坐標軸標簽

我們通過設置 title=None 移除了圖頂的 "year" 標簽。下面再一處每列數據的 "party" 標簽:

  1.     chart = alt.Chart(df).mark_bar().encode(
  2.         x=alt.X('party', title=None),
  3.         # ...
  4.     )

指定顏色圖

最后,我們還想自己指定圖柱的顏色。Altair 允許建立 domain 中數值與 range 中顏色的映射來實現所需功能,太貼心了:

  1.     cmap = {
  2.         'Conservative': '#0343df',
  3.         'Labour': '#e50000',
  4.         'Liberal': '#ffff14',
  5.         'Others': '#929591',
  6.     }
  7.  
  8.     chart = alt.Chart(df).mark_bar().encode(
  9.         # ...
  10.         color=alt.Color('party', scale=alt.Scale(domain=list(cmap.keys()), range=list(cmap.values())))
  11.     )

樣式調整后的最終代碼

應用上述樣式調整之后,代碼看起來不那么悅目了,但我們仍然是用聲明的方式實現的,這正是 Altair 如此有彈性的原因所在。實現過程中,仍然是使用的異于顯示數據的獨立變量來分離圖中不同屬性的,而不是像在 Matplotlib 中那樣直接對顯示數據做復雜的操作。唯一的不同是,我們的變量名字封裝在類似 alt.X() 的對象中,從而實現對顯示效果的控制:

  1.     import altair as alt
  2.     from votes import long as df
  3.  
  4.     cmap = {
  5.         'Conservative': '#0343df',
  6.         'Labour': '#e50000',
  7.         'Liberal': '#ffff14',
  8.         'Others': '#929591',
  9.     }
  10.  
  11.     df['year'] = df['year'].astype(str)
  12.  
  13.     # We're still assigning, e.g. 'party' to x, but now we've wrapped it
  14.     # in alt.X in order to specify its styling
  15.     chart = alt.Chart(df).mark_bar().encode(
  16.         x=alt.X('party', title=None),
  17.         y='seats',
  18.         column=alt.Column('year', sort=list(df['year']), title=None),
  19.         color=alt.Color('party', scale=alt.Scale(domain=list(cmap.keys()), range=list(cmap.values())))
  20.     )
  21.  
  22.     chart.save('altair-elections.html')

現在與 Matplotlib 方案扯平了,代碼數量達到了 16 行!

下圖是使用我們的樣式調整方案之后的 Altair 效果圖:

 

The Altair plot with our custom styling

結論

盡管在代碼數量上,使用 Altair 繪圖沒有表現出優勢,但它的聲明式繪圖語言使得對圖層的操控更為精密,這是我比較欣賞的。Altair 還提供了清晰而獨立的方式來調校顯示樣式,這使得 相關代碼與繪圖的代碼塊分離開來。Altair 確實是使用 Python 繪圖時又一個很棒的工具庫。  

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-06-09 18:02:19

2020-03-27 17:23:24

NVIDIA

2022-07-07 08:50:26

Python可視化模塊代碼

2020-12-21 05:56:54

Clipboard A復制圖像開發技術

2022-06-29 09:54:17

Python數據可視化Altair

2013-07-29 11:19:16

iOS開發iOS開發學習FMDB更新二進制圖片

2018-05-07 14:38:23

數據機器學習人工智能

2021-09-24 09:45:27

Python神經網絡人工智能

2013-12-04 16:07:27

Android游戲引擎libgdx教程

2011-03-28 12:33:09

SQL Server數據庫鏈接

2013-06-26 13:51:50

Deja Dup備份

2011-02-23 14:05:57

2017-09-15 09:45:08

華為

2022-02-09 18:28:46

多線程Excel代碼

2009-03-10 09:38:02

oraclepython數據庫

2011-03-21 09:17:06

NagiosFedora

2011-03-21 09:17:06

openSUSENagios

2011-03-21 09:17:06

UbuntuNagios
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级网站 | 精品综合久久久 | 99pao成人国产永久免费视频 | 国产精品美女久久久久久免费 | 欧美精品一级 | 国产这里只有精品 | 亚洲精品专区 | 日韩网站在线观看 | 99亚洲综合| 欧美黑人一区 | 日韩中文欧美 | 99国产精品久久久久老师 | 日韩在线观看中文字幕 | 狠狠综合久久av一区二区小说 | 久久免费精品视频 | 国产精品黄| 亚洲精品久久久久久宅男 | 韩日一区二区三区 | 久久午夜视频 | 一区二区在线免费观看 | 国产亚洲精品久久久久动 | 成人动慢| 日本精品免费在线观看 | 日韩a在线观看 | 欧美一区二区在线播放 | 亚洲精品一区二区在线观看 | 欲色av| www.久久精品 | 日韩视频免费 | 91视频在线网站 | 91亚洲视频在线 | 综合一区二区三区 | 91视频在线观看免费 | 一区二区在线看 | 在线观看黄色电影 | 久久精品男人的天堂 | 国产精品久久久久久久久久 | 婷婷成人在线 | 欧美一区二区三区在线观看视频 | 欧美国产一区二区 | 国产伦精品一区二区三区照片91 |