本文概述并比較Python數據可視化包和工具,包括Pandas,Seaborn,ggplot,Bokeh,pygal,和Plotly。
介紹
在Python世界中,有大量數據可視化的選項.因為各種各樣,要知道什么時候使用哪個是非常困難的.本文包含一些較為流行的樣例,并說明如果使用其創建簡單的條形圖.我會使用以下包/工具創建繪圖例子:
Pandas
Seaborn
ggplot
Bokeh
pygal
Plotly
在例子用,我將使用pandas操作數據,并啟動其可視化.在大多數情況下使用這些工具不需要pandas,但是我覺得pandas+可視化工具如此普遍,這是最好的起點。
Matplotlib怎么樣?
Matplotlib 是python可視化庫的祖父.它非常強大,但是太過復雜.你可以使用Matplotlib 做任何你需要做到的事情,但是并不容易弄明白.我不打算通過純Matplotlib 樣例講解,因為許多工具(尤其Pandas和Seaborn)是Matplotlib的thin wrappers.
對Matplotlib最大的抱怨是需要大量工作的到期望的圖表.在處理這些例子時,我發現更容易獲得優美的圖形,不需要大量大代碼.對于matplotlib冗余性的一個小例子,看一下這個ggplot后例子。
方法
我相信,只要人們開始閱讀這一點,他們會指出更好的方式來使用這些工具。我的目標不是建立在每個例子完全相同的圖形.我想在搜索解決方案大致相同的時間以大致相同的方式可視化數據.
按這個過程,最大的挑戰是格式化x和y軸,使得在給定一些大標簽時數據看起來合理.也許花一些時間弄清楚每個工具希望數據如何格式化.一旦弄明白這些部分,剩下的部分比較簡單的.
另外一個需要考慮的電視,條形圖可能是制作圖標類型最簡單的一種.這些工具讓你能夠繪制更多類型的圖標.我的示例更注重于易格式化性而不是創新可視化例子,因為標簽,一些圖表占用了很大空間,所以我削減了,只是為了保證文章的長度管理.最后我調整了圖像,因此任何模糊是縮放問題,并且不是實際輸出質量.
最后,我接近使用其他工具替換Excel的心態.我認為我的例子更能說明報告,演講,郵件或者靜態網頁中的展示.如果你評估實時數據可視化或者通過其他機制共享的工具,那么部分工具提供了很多我沒有提到的功能.
數據集
在上篇文章中介紹了我們將要處理的數據.數據集中包含125行項目,但我選擇關注前10以保證簡單點.你可以在這找到完整的數據.
Pandas
我使用pandas DataFrame作為所有各種圖標的出發點.幸運的是,pandas為我們提供了內置的matplotlib層繪圖能力.將使用它作為基準.首先,導入模塊,并將數據讀入DataFrame.我們希望對數據進行排序,并限制為前10項.
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:10]
對所有例子我們使用同樣的budget.以下是前5項目樣子:
現在,設置展示使用更好的默認值,并創建一個條形圖:
pd.options.display.mpl_style = 'default'
budget_plot = budget.plot(kind="bar",x=budget["detail"],
title="MN Capital Budget - 2014",
legend=False)
使用detail列創建圖標同時展示標題并區屬圖例.這是將圖片存為png的額外代碼.
fig = budget_plot.get_figure()
fig.savefig("2014-mn-capital-budget.png")
這是圖片樣子(階段是為了文章長度管理).
看起來基本不錯.理想情況下,我想多做一些y軸的格式化,但需要matplotlib 的處理.這是個完美有用的可視化,但是不能通過pandas做更多純粹的定制.
Seaborn
Seaborn是一個基于matplotlib的可視化庫.旨在讓默認的數據可視化更加悅目.同時讓復雜的圖表更簡單的創建.它和pandas集成.我的例子不允許Seaborn 顯著差異.我喜歡Seaborn 的一個原因是各種各樣的內置樣式,讓你快速更改調色板以看起來更加漂亮.因此,關于簡單的圖表Seaborn沒有為我們做很多. 標準導入并讀入數據:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
budget = pd.read_csv("mn-budget-detail-2014.csv")
budget = budget.sort('amount',ascending=False)[:>10]
使用x_order對x軸項目排序.這部分代碼設置排序,圖表風格和條形圖顏色:
sns.set_style("darkgrid")
bar_plot = sns.barplot(x=budget["detail"],y=budget["amount"],
palette="muted",
x_order=budget["detail"].tolist())
plt.xticks(rotation=>90)
plt.show()
評論
查看更多