03.08 Python-Seaborn繪圖(matplotlib補充)

Seaborn是對matplotlib的擴展,是一個數據可視化庫,提供更高級的API封裝,在應用中更加的方便靈活。下面我簡單介紹一下他的最基本用法,實際應用的時候,可以直接從文檔中查找這個庫,這時候使用就很快捷了。


首先將使用它所需要的庫導入進來,當然,其中包括numpy之類的是為了演示它的功能才導入的,大家要先理解一下每個庫的作用。

<code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import Series,DataFrame
import seaborn as sns # seaborn習慣簡寫為sns/<code>


直方圖和密度圖

如果在 ipython,可以通過 %matplotlab 來解決每次通過 plt.show() 來顯示圖像,或者 jupyter notebook 中可以使用%matplotlib inline,後面程序我就省略了 plt.show() ,可以根據自己的環境選擇顯示圖像的方式。

matplotlib

<code>s1 = Series(np.random.randn(1000)) # 生成1000個點的符合正態分佈的隨機數
plt.hist(s1) # 直方圖,也可以通過plot(),修改裡面kind參數實現
s1.plot(kind='kde') # 密度圖/<code>
Python-Seaborn繪圖(matplotlib補充)

seaborn

<code>s1 = Series(np.random.randn(1000)) # 生成1000個點的符合正態分佈的隨機數
sns.distplot(s1,hist=True,kde=True,rug=True) # 前兩個默認就是True,rug是在最下方顯示出頻率情況,默認為False
# bins=20 表示等分為20份的效果,同樣有label等等參數
sns.kdeplot(s1,shade=True,color='r') # shade表示線下顏色為陰影,color表示顏色是紅色
sns.rugplot(s1) # 在下方畫出頻率情況/<code>
Python-Seaborn繪圖(matplotlib補充)

給出兩種方式通過最基本的方式畫出來的效果,怎麼樣,是不是發現seaborn很強大。


柱狀圖和熱力圖

下載實驗數據

<code>df = sns.load_dataset('flights') # 在線下載一個數據用於實驗,在sns.load_dataset()函數里有很多的數據,想了解更多的可以到GitHub中找到源碼,你就會很清楚了/<code>

我們可以先看一下里面的數據,可以看到,這是一個航空的數據,裡面有年、月和乘客數量,接下來我們就要在這份數據上進行分析。

Python-Seaborn繪圖(matplotlib補充)

數據處理

我們可以通過透視表來先對這份數據進行一下處理,大家可以自己試一下,這樣生成的結果是以年為columns,以月為index,表內數據為對應的乘客數量。

<code>df = df.pivot(index='month',columns='year',values='passengers') # 生成一個透視表,得到一個以年、月為軸的二維數據表/<code>

繪製柱狀圖

<code>s = df.sum()
# 通過matplotlib繪出圖形
s.plot(kind='bar')
# 通過seaborn繪出圖形
sns.barplot(x=s.index,y=s.values)/<code>
Python-Seaborn繪圖(matplotlib補充)

繪製熱力圖

<code>df.plot() # 線性的顯示數據情況
# sns.heatmap(df) # 生成熱力圖
# sns.heatmap(df,annot=True,fmt='d') # annot參數是指顯示數據,fmt='d'是指以整數形式顯示/<code>
Python-Seaborn繪圖(matplotlib補充)

Python-Seaborn繪圖(matplotlib補充)

Python-Seaborn繪圖(matplotlib補充)


圖形顯示效果

axes_style and set_style

<code>x = np.linspace(0,14,100)
y1 = np.sin(x)
y2 = np.sin(x+2)*1.25
def sinplot():
    plt.plot(x,y1)
    plt.plot(x,y2)

sinplot() # 以matplotlib顯示,生成兩個函數圖像/<code>
Python-Seaborn繪圖(matplotlib補充)

<code># seaborn的5種裝飾風格
styles = ['darkgrid','dark','white','whitegrid','tricks'] # 顏色代表背景顏色,grid代表是否有網格
sns.set_style(style[0]) # 進行裝飾,括號內可以直接寫裝飾風格
sinplot() # 經過修飾之後的圖像

sns.axes_style() # 顯示當前主題的內容,這些數據都可以修改微調
# 更改的時候就將其信息的以字典形式複製到set_style()裡,當做參數來修改(注意是以字典的形式)
sns.set() # 設置風格為空,即清空自己定義的,恢復到默認的時候/<code>
Python-Seaborn繪圖(matplotlib補充)

plotting_context and set_context

<code>context = ['paper','notebook','talk','poster'] # seaborn本身定義好的
sns.set_context('paper',rc={'grid.linewidth':3.0}) # rc參數
sinplot()

sns.plotting_context() # 顯示出當前狀態的數據
sns.set() # 恢復到默認/<code>
Python-Seaborn繪圖(matplotlib補充)

圖像貌似一樣,但並不是沒有成功,只是變化比較細微,真正用到的時候就可以體會到了。


調色功能

<code># 先繪製一個圖像
def sinplot1():
    x = np.linspace(0,14,100)
    plt.figure(figsize=(8,6)) # 圖像比較小時,通過這個函數更改大小
    for i in range(4):
      plt.plot(x,np.sin(x+i)*(i+0.75),label='sin(x+%s)*(%s+0.75)' % (i,i))
    plt.legend()
sinplot1()/<code>
Python-Seaborn繪圖(matplotlib補充)

<code># 引入seaborn
sns.color_palette() # 使用調色板
# 不傳入參數返回當前使用的調色板(RGB)
sns.palplot(sns.color_palette()) # 畫出調色板,參數為上面的調色板/<code>

接下來,我們就要調整我們的調色板了。

<code>pal.style = ['deep','nuted','pastel','bright','dark','colorblind'] # seaborn默認定義的調色板

# 第一種設置畫板方式
sns.set_palette(sns.color_palette('dark')) # 設置色板
sns.set() # 恢復默認風格

# 第二種設置畫板方式,並且最後恢復到默認
with sns.color_palette():
    sinplot1() # 在內部調整畫板輸出圖形,當with結束時,則恢復默認/<code>

調色板裡的顏色是定義好的,那麼如果我們將要繪製的圖形包括很多的函數,需要更多的顏色,該怎麼辦呢?

<code># 默認提供的色板數量是固定的,如果圖像是更多的函數,那麼顏色將循環色板中的風格。如果想不使他顏色有相同,可以通過sns.color_palette()來修改
sns.color_palette([(0.5,0.2,0.6),(0.3,0.3,0.4)]) # 因為色板是以列表的形式存儲的,裡面的每種風格以元組的形式存在所以需要用[()]

# 第二種增加色板顏色的方法
sns.color_palette('hls',8) # hls方法,後面寫參數8,即生成有8種不同顏色的色板/<code>


分享到:


相關文章: