你們都知道,Matplotlib 是衆多 Python 可視化包的鼻祖,也是Python最經常使用的標準可視化庫,其功能很是強大,同時也很是複雜,想要搞明白並不是易事。但自從Python進入3.0時代之後,pandas的使用變得更加普及,它的身影常常見於市場分析、爬蟲、金融分析以及科學計算中。python
做爲數據分析工具的集大成者,pandas做者曾說,pandas中的可視化功能比plt更加簡便和功能強大。實際上,若是是對圖表細節有極高要求,那麼建議你們使用matplotlib經過底層圖表模塊進行編碼。固然,咱們大部分人在工做中是不會有這樣變態的要求的,因此一句import pandas as pd就足夠應付所有的可視化工做了。下面,咱們總結一下PD庫的一些使用方法和入門技巧。
dom
1、線型圖 工具
對於pandas的內置數據類型,Series 和 DataFrame 都有一個用於生成各種 圖表 的 plot 方法。 默認狀況下, 它們所生成的是線型圖。其實Series和DataFrame上的這個功能只是使用matplotlib庫的plot()方法的簡單包裝實現。佈局
參考如下示例代碼 :編碼
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18', periods=10), columns=list('ABCD')) df.plot()
執行上面示例代碼,獲得如下結果 -spa
若是索引由日期組成,則調用gct().autofmt_xdate()
來格式化x
軸,如上圖所示。3d
咱們可使用x
和y
關鍵字繪製一列與另外一列。code
s = Series( np. random. randn( 10). cumsum(), index= np. arange( 0, 100, 10))
s. plot()
pandas 的大部分繪圖方法都有 一個 可選的ax參數, 它能夠是一個 matplotlib 的 subplot 對象。 這使你可以在網格 佈局 中 更爲靈活地處理 subplot 的位置。 DataFrame的plot 方法會在 一個 subplot 中爲各列繪製 一條 線, 並自動建立圖例( 如圖所示):對象
df = DataFrame( np. random. randn( 10, 4). cumsum( 0), ...: columns=[' A', 'B', 'C', 'D'], index= np. arange( 0, 100, 10)) df. plot()
在生成線型圖的代碼中加上 kind=' bar'( 垂直柱狀圖) 或 kind=' barh'( 水平柱狀圖) 便可生成柱狀圖。 這時,Series 和 DataFrame 的索引將會被用 做 X( bar) 或 (barh)刻度: blog
In [59]: fig, axes = plt. subplots( 2, 1) In [60]: data = Series( np. random. rand( 16), index= list(' abcdefghijklmnop')) In [61]: data. plot( kind=' bar', ax= axes[ 0], color=' k', alpha= 0. 7) Out[ 61]: < matplotlib. axes. AxesSubplot at 0x4ee7750> In [62]: data. plot( kind=' barh', ax= axes[ 1], color=' k', alpha= 0.
對於 DataFrame, 柱狀 圖 會 將 每一 行的 值 分爲 一組, 如圖 8- 16 所示:
In [63]: df = DataFrame( np. random. rand( 6, 4), ...: index=[' one', 'two', 'three', 'four', 'five', 'six'], ...: columns= pd. Index([' A', 'B', 'C', 'D'], name=' Genus')) In [64]: df Out[ 64]: Genus A B C D one 0. 301686 0. 156333 0. 371943 0. 270731 two 0. 750589 0. 525587 0. 689429 0. 358974 three 0. 381504 0. 667707 0. 473772 0. 632528 four 0. 942408 0. 180186 0. 708284 0. 641783 five 0. 840278 0. 909589 0. 010041 0. 653207 six 0. 062854 0. 589813 0. 811318 0. 060217 In [65]: df. plot( kind=' bar')
如今經過建立一個條形圖來看看條形圖是什麼。條形圖能夠經過如下方式來建立 -
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) df.plot.bar()
執行上面示例代碼,獲得如下結果 -
要生成一個堆積條形圖,經過指定:pass stacked=True -
import pandas as pd df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) df.plot.bar(stacked=True)
執行上面示例代碼,獲得如下結果 -
要得到水平條形圖,使用barh()
方法 -
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) df.plot.barh(stacked=True)
可使用plot.hist()
方法繪製直方圖。咱們能夠指定bins
的數量值。
import pandas as pd import numpy as np df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c']) df.plot.hist(bins=20)
執行上面示例代碼,獲得如下結果 -
要爲每列繪製不一樣的直方圖,請使用如下代碼 -
import pandas as pd import numpy as np df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c']) df.hist(bins=20)
執行上面示例代碼,獲得如下結果 -
Boxplot能夠繪製調用Series.box.plot()
和DataFrame.box.plot()
或DataFrame.boxplot()
來可視化每列中值的分佈。
例如,這裏是一個箱形圖,表示對[0,1)
上的統一隨機變量的10
次觀察的五次試驗。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) df.plot.box()
執行上面示例代碼,獲得如下結果 -
可使用Series.plot.area()
或DataFrame.plot.area()
方法建立區域圖形。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd']) df.plot.area()
執行上面示例代碼,獲得如下結果 -
可使用DataFrame.plot.scatter()
方法建立散點圖。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd']) df.plot.scatter(x='a', y='b')
執行上面示例代碼,獲得如下結果 -
餅狀圖可使用DataFrame.plot.pie()
方法建立。
import pandas as pd import numpy as np df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x']) df.plot.pie(subplots=True)
執行上面示例代碼,獲得如下結果 -
公衆號python社區營