今天延續上一篇說明繪圖的工具,其中 Seaborn 有很多很強大的功能,也同時有更多的美化效果。
此篇文是由 Joyce 所撰寫
如果想用自己的電腦來跑的話需要安裝 Package
# For anoconda (recommend)
$ conda install seaborn
# For pip
$ pip install seaborn
要使用Seaborn函數,需要先引入seaborn,習慣上會用sns作為縮寫。
import seaborn as sns # 引入Seaborn
Seaborn有預設好圖形的背景顏色,有五種設定值,可以使用set_style( )進行更改,或是在set()裡更改style的參數。
import numpy as np # 引入NumPy
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
x = np.arange(1,11) # x軸的值
y = [3,1,8,5,4,2,4,6,3,7] # y軸的值
plt.title("change background") # 圖的標題
plt.xlabel("x axis") # x軸的名稱
plt.ylabel("y axis") # y軸的名稱
sns.set(style = "whitegrid") # 白色網格背景
plt.bar(x, y) # 繪製長條圖
plt.show() # 顯現圖形
在繪圖上,為了美感,有時不想要四周圍的邊框,在Matplotlib中是無法移除的,但Seaborn解決了這個困擾,利用despine()這個函數,預設上方跟右方的邊框會消失。
import numpy as np # 引入NumPy
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
x = np.arange(1,11) # x軸的值
y = [3,1,8,5,4,2,4,6,3,7] # y軸的值
plt.title("despine practice") # 圖的標題
plt.xlabel("x axis") # x軸的名稱
plt.ylabel("y axis") # y軸的名稱
sns.set(style = "white") # 白色網格背景
sns.despine(top = True, right = True) # 移除上方跟右方的框線
plt.bar(x, y) # 繪製長條圖
plt.show() # 顯現圖形
Seaborn也預設好四種線的粗細,可以進行修改,預設的話是notebook,根據上到下的順序,線由細到粗。與style相同,有兩種方式可以使用,第一種set_context( ),第二種是在set()裡更改context的參數。
import numpy as np # 引入NumPy
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
x = np.arange(-180, 180)
y = np.sin(x * np.pi / 180.0)
plt.title("context practice") # 圖的標題
plt.xlabel("x axis") # x軸的名稱
plt.ylabel("y axis") # y軸的名稱
sns.set(context = "talk") # 改變線條的粗細
plt.plot(x, y) # 繪製x,y軸的圖
plt.show() # 顯現圖形
Seaborn提供的作法是調色盤的方式,可以想像成先把顏色調好,要用的時候,在將顏色圖上去。利用color_palette()這個函數,可以設定我們想要的調色盤。
seaborn.color_palette(palette=None, n_colors=None, desat=None)
預設的顏色有十種,可以透過六種預設的主題進行修改。
current_palette = sns.color_palette() # 預設的調色盤
sns.palplot(current_palette) # 顯示調色盤
bright_palette = sns.color_palette("bright") # 改變主題
sns.palplot(bright_palette )# 顯示調色盤
在繪製等高線圖的時候,會利用顏色的深淺來表示高度,Seaborn也有提供漸層的調色盤。
漸層盤提供相當多的參數可進行選擇,如果直接使用顏色來表示的話,注意第一個字母要大寫,結尾要加上s,例如:"Blues"
blue_palette = sns.color_palette("Blues") # 藍色的調色盤,由淺到深
sns.palplot(blue_palette) # 顯示調色盤
blue_r_palette = sns.color_palette("Blues_r") # 藍色的調色盤,由深到淺
sns.palplot(blue_r_palette) # 顯示調色盤
OrRd_palette = sns.color_palette("OrRd") # 橘色混紅色的調色盤
sns.palplot(OrRd_palette) # 顯示調色盤
利用h(色相)、l(亮度)、s(飽和度)三個的值可以調配出更多的顏色。
hls_default_palette = sns.hls_palette() # hls預設的調色盤
sns.palplot(hls_default_palette) # 顯示調色盤
hls_palette = sns.hls_palette(h = 0.5, l = 0.4, s = 0.6) # 改變hls的預設值
sns.palplot(hls_palette) # 顯示調色盤
沿用上一章圓餅圖的例子
import numpy as np # 引入NumPy
import matplotlib.pyplot as plt # 引入matplotlib的函數
category = ["clothing", "book", "meal", "snacks"] # 總類名稱
expand = [2000, 1500, 3000, 800] # 圓餅圖的值
color = ["red", "yellow", "green", "blue"] # 設定顏色
plt.title("pie chart") # 圖的標題
plt.pie(expand, labels = category, colors = color) # 繪製圓餅圖
plt.show() # 顯現圖形
import numpy as np # 引入NumPy
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
category = ["clothing", "book", "meal", "snacks"] # 總類名稱
expand = [2000, 1500, 3000, 800] # 圓餅圖的值
plt.title("pie chart") # 圖的標題
hls_default_palette = sns.hls_palette()
plt.pie(expand, labels = category, colors = hls_default_palette) # 繪製圓餅圖
plt.show() # 顯現圖形
在Seaborn裡,提供了幾種圖形,讓資料可透過圖形的呈現令人一目了然。首先,先在檔案中,放入再來要分析的csv檔。
data 連結
在Matplotliib裡也有提供長條圖的畫法,但Seaborn提供的功能更多,像是它可以使用DataFrame的資料進行分析,也可以顯示平均值、中位數的位置之類的。
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("barplot practice") # 圖的標題
sns.barplot(x="day", y="total_bill", data = df) # 繪製長條圖
plt.show() # 顯現圖形
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
from numpy import median # 引入median函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("barplot practice2") # 圖的標題
sns.barplot(x="day", y="total_bill", data = df, estimator=median) # 繪製長條圖
plt.show() # 顯現圖形
因為英文是countplot,所以名稱叫計數圖,其實就是直方圖的意思。
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("countplot practice") # 圖的標題
sns.countplot(x="size", hue = "sex", data = df) # 繪製計數圖
plt.show() # 顯現圖形
盒狀圖即是四分位圖,用來顯示資料的分散程度。
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("boxplot practice") # 圖的標題
sns.boxplot(x="day",y="total_bill",hue="sex",data=df) # 繪製盒狀圖
plt.show() # 顯現圖形
此圖就是折線圖的概念,但不會像折線圖那樣有明顯的折點,此圖的區間分布是連續的,因此線段看起來是平滑的。
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("kdeplot practice") # 圖的標題
sns.kdeplot(df["tip"]) # 繪製密度圖
plt.show() # 顯現圖形
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("kdeplot practice2") # 圖的標題
sns.kdeplot(df["total_bill"], shade=True) # 繪製密度圖
plt.show() # 顯現圖形
distplot(),此函數結合了Matplotlib的hist()与kdeplot的功能,兩種圖形可以同時呈現,當然透過True和False可以關掉其中一種。
import pandas as pd # 引入Pandas
import seaborn as sns # 引入Seaborn
import matplotlib.pyplot as plt # 引入matplotlib的函數
df = pd.read_csv("tips.csv") # 讀入檔案
plt.title("distplot practice") # 圖的標題
sns.distplot(df["tip"]) # 繪製直方密度圖
plt.show() # 顯現圖形
這兩篇終於把繪圖的工具結束了~雖然有很多小細節,但是之後會用到的也不會那麼多,這邊列出來給大家做個參考,如果看到自己喜歡的工具也可以開始應用!