使用Seaborn繪圖
今天,總結Seaborn畫圖,其實直接網上搜索Seaborn畫圖的部落格有很多,但是很多都是直接把說明文件羅列一下,
我這裡舉個例子說明下我使用Seaborn要解決的一個具體問題。
(先列下提綱,以後補充~)
問題描述
有100樣本,每個樣本8個屬性的資料,如下圖:
我需要畫出這些資料。
Seaborn函式的標籤與API規律
檢視Seaborn官網的API,可以看到整個Seaborn畫圖的實際繪畫模組只有
以下七個標籤:
- Axis grids
- Categorical plots
- Distribution plots
- Regression plots
- Matrix plots
- Timeseries plots
- Miscellaneous plots
而且每個標籤裡面的子函式傳入引數非常類似,只要掌握一個,其他的直接改下函式名字即可畫出來,因此實際
學習Seaborn畫圖只要看七個函式說明即可!
我畫圖時主要用到了其中的Categorical plots
模組下的函式。下面主要以seaborn.stripplot
函式為例子說明如下:
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
這個函式的最關鍵的引數就是前4個引數,後面的引數都是微調的問題。
x
引數代表繪圖的橫座標的資料標籤項y
引數代表繪圖的縱座標的資料標籤項hue
引數代表同一個x下多標籤的資料標籤項data
引數代表輸入資料,一般格式都是DataFrame
的形式。
我們可以看一個Seaborn
自帶的例子,將資料讀取,然後儲存成excel
檔案並開啟觀察
(這裡順便吐槽一下,DataFrame資料結構實在是太好用、太方便了,可以讀取/儲存成各種資料格式,
並且操作資料非常方便,下週週末要總結一下!),程式碼如下:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips") #讀取seaborn自帶的一個測試資料
tips.to_excel('tips.xlsx') #儲存成excel檔案,進行觀察
得到的資料如下圖:
可以看到這是一個典型的打了標籤的資料集,這個資料僅僅輸入一句程式碼:
sns.stripplot(x="sex", y="total_bill", hue="day",data=tips)
即可得到如下圖所示的資料散點圖:
我們仔細觀察圖片,發現該圖實際上橫座標是sex
標籤,縱座標是total_bill
標籤,而圖示是根據day
標籤進行分類繪製的。
但是我們在實際操作資料時,一般原始資料都沒有打標籤,就像是我一開始給出的資料集那樣,每個屬性都是一個數值,但是我們想要看每個屬性的分佈圖,即:x軸上是屬性標籤,這時我們就需要簡單處理一下我們的資料了。
進行資料預處理
對於給出的資料,我們只需要寫一個簡單的函式即可:
data = [];
for j in range(df.iloc[:,0].size):
LineSeries = df.iloc[j] #得到行的序列
for k in range(LineSeries.size):
data.append((LineSeries[k],LineSeries.index[k]))
#下面一行絕對不要用,DataFrame絕對不要動態加行列!!!!
# Drawdf.loc[Drawdf.iloc[:,0].size] = [LineSeries[k],LineSeries.index[k],strList[i]]
DataToDraw = pd.DataFrame(columns=('value','property'),data =data)
return DataToDraw
這樣,我們根據函式返回的資料,即可直接帶入Seaborn相關的函式進行繪圖。
呼叫函式並得到結果
我們可以直接呼叫多個函式,裡面的引數都是一樣的
df = pd.read_excel("test.xlsx")
dfToDraw = generateDrawDF(df)
plt.figure()
sns.boxplot(x='property',y='value',data = dfToDraw) #繪製不同屬性分佈的箱圖
plt.figure()
sns.violinplot(x='property',y='value',data = dfToDraw) #繪製不同屬性小提琴圖
比如箱圖和小提琴圖(小提琴是箱線圖和密度分佈的一個組合),圖如下所示:
最後,本篇的全部程式碼在下面這個網頁可以下載: