目錄
1. 折線圖
2. 柱狀圖
3. 直方圖
4. 箱線圖
5. 區(qū)域圖
6. 散點(diǎn)圖
7. 餅圖六邊形容器圖
數(shù)據(jù)分析的結(jié)果不僅僅只是你來看的,更多的時候是給需求方或者老板來看的,為了更直觀地看出結(jié)果,
數(shù)據(jù)可視化是必不可少的一個環(huán)節(jié)。這里帶大家來看下一些常用的圖形的畫法。
1 2 3 4 5 6 7 8 9 10 | # 導(dǎo)入相關(guān)庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib # matplotlib.style.use('ggplot') % matplotlib inline #總結(jié):%matplotlib inline 可以在Ipython編譯器里直接使用,功能是可以內(nèi)嵌繪圖,并且可以省略掉plt.show()這一步。 np.random.seed( 100 ) |
Pandas 的數(shù)據(jù)可視化的實(shí)現(xiàn)底層依賴于 matplotlib,所以畫圖時很多基礎(chǔ)知識需要涉及到 matplotlib。
畫圖其實(shí)就是跟各種數(shù)字打交道,這里我們先給偽造一些數(shù)據(jù)。
1 2 3 4 5 6 7 8 9 10 | df = pd.DataFrame(np.random.randint( - 10 , 10 , ( 10 , 3 )), index = pd.date_range( '1/1/2000' , periods = 10 ), columns = list ( 'ABC' )) df = df.cumsum() df.head() Out[ 112 ]: A B C 2000 - 01 - 01 - 2 - 7 - 3 2000 - 01 - 02 3 - 1 - 3 2000 - 01 - 03 - 5 - 9 - 11 2000 - 01 - 04 - 1 - 17 - 4 2000 - 01 - 05 5 - 12 - 10 |
生成數(shù)據(jù)之后,我們看下如何進(jìn)行畫圖。其實(shí)非常簡單的,調(diào)用 plot 方法就可以看到畫圖的結(jié)果了。默認(rèn)情況下參數(shù) kind='line' 表示圖的類型為折線圖。通過折線圖可以看出數(shù)據(jù)隨著某個變量的變化趨勢。
1 | df.plot() |
1 | df.plot(x = 'A' ,y = 'C' ) |
通過柱狀圖可以對比多個值的差別。如果想要畫出柱狀圖,可以將參數(shù) kind 設(shè)置為 bar 或者 barh。
1 2 | df.plot(kind = 'bar' ) plt.show() |
可以看到,設(shè)置 kind='bar' 之后,圖形以索引為 x 軸, 列為 y 軸。
1 2 | df.plot(kind = 'barh' ) plt.show() |
可以看到,設(shè)置 kind='barh' 之后,圖形以列為 x 軸, 索引為 y 軸。同樣我們也可以自己指定 x 軸和 y 軸。
1 2 3 | #自己設(shè)定x軸y軸 df.plot(kind = 'bar' ,x = 'A' ,y = [ 'B' , 'C' ]) plt.show() |
#此外,如果想要生成堆疊條形圖的haunted,可以設(shè)置參數(shù) stacked=True。
1 2 | df.plot(kind = 'bar' ,stacked = True ) plt.show() |
直方圖是一種展示數(shù)據(jù)頻數(shù)/率的特殊的柱狀圖。如果想要畫出直方圖,可以將參數(shù) kind 設(shè)置為 hist??梢酝ㄟ^設(shè)置參數(shù) bins 來改變 bin 的大小。
1 2 | df.plot(kind = 'hist' ) plt.show() |
1 2 | df.plot(kind = 'hist' ,bins = 5 ) plt.show() |
通過箱線圖可以展示出分位數(shù),具體包括上四分位數(shù)、下四分位數(shù)、中位數(shù)以及上下5%的極值。如果想要畫出箱線圖,可以將參數(shù) kind 設(shè)置為 box。
1 2 | df.plot(kind = 'box' ) plt.show() |
如果想要畫出區(qū)域圖,可以將參數(shù) kind 設(shè)置為 area。默認(rèn)情況下,區(qū)域圖是堆積的,要生成堆積的區(qū)域圖圖,每列必須全部為正值或全為負(fù)值。
1 2 | df. abs ().plot(kind = 'area' ) plt.show() |
想要生成不堆積的區(qū)域圖,設(shè)置參數(shù) stacked=False 即可。
1 2 | df.plot(kind = 'area' , stacked = False ) plt.show() |
如果想要畫出散點(diǎn)圖,可以將參數(shù) kind 設(shè)置為 scatter,同時需要指定 x 和 y。通過散點(diǎn)圖可以探索變量之間的關(guān)系。
1 2 | df.plot(kind = 'scatter' , x = 'A' , y = 'B' ) plt.show() |
可以設(shè)置參數(shù) c 作為列的名稱以為每個點(diǎn)提供顏色。
1 2 | df.plot(kind = 'scatter' , x = 'A' , y = 'B' , c = 'C' ) plt.show() |
#如果想要在單個軸上繪制多個列組,需要指定 ax。
1 2 3 | ax = df.plot(kind = 'scatter' , x = 'A' , y = 'B' , color = 'blue' ) df.plot(kind = 'scatter' , x = 'C' , y = 'B' , color = 'green' , ax = ax) plt.show() |
如果想要畫出餅圖,可以將參數(shù) kind 設(shè)置為 scatter。
1 2 3 | a = df.A[: 5 ] a. abs ().plot.pie(subplots = False ,figsize = ( 4 , 4 )) plt.show() |
1 2 | a. abs ().plot.pie(subplots = True ,figsize = ( 4 , 4 )) plt.show() |
如果想要自動計(jì)算出比例,可以設(shè)置參數(shù) autopct。
1 2 | a. abs ().plot.pie(subplots = True , figsize = ( 4 , 4 ), autopct = '%.2f' ) plt.show() |
在繪制散點(diǎn)圖時,如果數(shù)據(jù)過于密集,則無法單獨(dú)繪制出每個點(diǎn),這時候可以考慮 Hexbin 圖。
其中,左邊坐標(biāo)表示的是值的分布,右邊坐標(biāo)表示的是數(shù)據(jù)量大小與顏色的對比。一個有用的關(guān)鍵字參數(shù)是 gridsize ; 它控制x方向的六邊形數(shù)量,并且默認(rèn)為100.較大的格柵意味著更多的較小的分區(qū)。
1 2 3 4 | df = pd.DataFrame(np.random.randn( 1000 , 2 ), columns = [ 'A' , 'B' ]) df[ 'B' ] = df[ 'B' ] + np.arange( 1000 ) df.plot(kind = 'hexbin' , x = 'A' , y = 'B' , gridsize = 10 ) plt.show() |
1 2 | df.plot(kind = 'hexbin' , x = 'A' , y = 'B' , gridsize = 20 ) plt.show() |