案例 學習網址:https://seaborn.pydata.org/examples/errorband_lineplots.html import seaborn as sns import pandas as pd sns.set_theme(style="darkgrid") # 導入數據 ...
目錄
案例
學習網址:https://seaborn.pydata.org/examples/errorband_lineplots.html
import seaborn as sns
import pandas as pd
sns.set_theme(style="darkgrid")
# 導入數據
fmri = pd.read_csv("../../seaborn-data-master/fmri.csv")
# 查看數據
fmri.head()
subject | timepoint | event | region | signal | |
---|---|---|---|---|---|
0 | s13 | 18 | stim | parietal | -0.017552 |
1 | s5 | 14 | stim | parietal | -0.080883 |
2 | s12 | 18 | stim | parietal | -0.081033 |
3 | s11 | 18 | stim | parietal | -0.046134 |
4 | s10 | 18 | stim | parietal | -0.037970 |
# 畫有誤差錯誤帶的時序圖
sns.lineplot(
x = "timepoint", y = 'signal',
hue = 'region', style = 'event',
data = fmri
)
sns.lineplot()
的案例
example 1
# 導入數據
import pandas as pd
import seaborn as sns
flights = pd.read_csv("../../seaborn-data-master/flights.csv") # 10年中
flights.head()
year | month | passengers |
---|---|---|
0 | 1949 | January |
1 | 1949 | February |
2 | 1949 | March |
3 | 1949 | April |
4 | 1949 | May |
may_flights = flights.query("month == 'May'")
# may_flights = flights.loc[flights["month"] == 'May'] 也行
print(may_flights)
sns.lineplot(data = may_flights, x = 'year', y = 'passengers')
[out]:
year month passengers
4 1949 May 121
16 1950 May 125
28 1951 May 172
40 1952 May 183
52 1953 May 229
64 1954 May 234
76 1955 May 270
88 1956 May 318
100 1957 May 355
112 1958 May 363
124 1959 May 420
136 1960 May 472
example 2
換一種形式處理數據
flights_wide = flights.pivot("year", "month", "passengers")
'''
參數解讀:
year : 指定每一行的輸出內容
month : 指定每一列的輸出內容
passengers : 指定輸出的內容
'''
flights_wide.head()
month | April | August | December | February | January | July | June | March | May | November | October | September |
---|---|---|---|---|---|---|---|---|---|---|---|---|
year | ||||||||||||
1949 | 129 | 148 | 118 | 118 | 112 | 148 | 135 | 132 | 121 | 104 | 119 | 136 |
1950 | 135 | 170 | 140 | 126 | 115 | 170 | 149 | 141 | 125 | 114 | 133 | 158 |
1951 | 163 | 199 | 166 | 150 | 145 | 199 | 178 | 178 | 172 | 146 | 162 | 184 |
1952 | 181 | 242 | 194 | 180 | 171 | 230 | 218 | 193 | 183 | 172 | 191 | 209 |
1953 | 235 | 272 | 201 | 196 | 196 | 264 | 243 | 236 | 229 | 180 | 211 | 237 |
sns.lineplot(data = flights_wide['May'])
example 3
## 可以輸出多列的線型圖
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 6)) # 為了讓圖例不覆蓋曲線
sns.lineplot(data = flights_wide)
plt.legend(loc='upper left') # 設置圖例的位置
example 4
# 繪製每年的平均值以及95%的置信區間
sns.lineplot(data = flights, x = 'year', y = 'passengers')
example 5
# 可以對不同分組應用不同的顏色:hue
sns.lineplot(data = flights, x = 'year', y = 'passengers', hue = 'month') # 用不同的顏色區分不同的月份
example 6
# 可以通過調節 style 參數更改線條的類型
plt.figure(figsize=(8,6))
sns.lineplot(data = flights, x = 'year', y = 'passengers', hue = 'month', style = 'month')
plt.legend(loc='upper left')
可以發現顏色圖例和example3一致(除了月份順序)
example 7
sns.lineplot(data = flights, x = 'passengers', y = 'year', orient = 'y')
# xy軸互換,此時 1個 y 對應多個 x ,如果直接畫的畫有點類似於 迪利克雷函數 那種 圖像形式,
# 而加上 orient = 'y' 就能得到每一年的平均值,並畫出95%的置信區間
註:使用 orient 參數前需要將seaborn版本升級到 0.12.0
# 查看 seaborn 版本
sns.__version__
'0.12.0'
example 8
## 載入數據
fmri = pd.read_csv("../../seaborn-data-master/fmri.csv")
fmri.head()
subject | timepoint | event | region | signal |
---|---|---|---|---|
0 | s13 | 18 | stim | parietal |
1 | s5 | 14 | stim | parietal |
2 | s12 | 18 | stim | parietal |
3 | s11 | 18 | stim | parietal |
4 | s10 | 18 | stim | parietal |
sns.lineplot(data = fmri, x = 'timepoint', y = 'signal', hue = 'event') # 以 event 為依據分類
example 9
# 接著 example 8 的例子,用不同的色調區分 region,用不同的線條類型區分 event
sns.lineplot(data=fmri, x='timepoint', y='signal', hue='region', style='event')
example 10
# 可以用 markers = True 進行描點
sns.lineplot(
data=fmri,
x='timepoint',
y='signal',
hue='event',
style='event',
markers=True, # 不同類別線條上的描點進行區別
dashes=False # 不同類別線條的形狀不進行區別
)
example 11
# 這次利用誤差線而不是誤差寬度
sns.lineplot(
data = fmri,
x='timepoint',
y='signal',
hue='event',
err_style='bars',
errorbar=('se',2) # se代表樣本標準誤差
)
# errorbar可選參數有 'ci' 'se' 'sd' 'pi'
# ci 是顯著性檢驗的補充,反映的是真實的均值或者均值區別的範圍,即置信區間
# se 標準誤差(Standard Error)
# sd 樣本標準差
example 12
# 使用 units 參數進行分組
sns.lineplot(
data = fmri.query("region == 'frontal'"),
x='timepoint',
y='signal',
hue='event',
units='subject',
estimator=None, #用於在同一水平x上聚合y變數的多個觀測值的方法,如果是 None,將繪製所有觀測值
# lw=1
)
example 13
# 載入新的數據集
dots = pd.read_csv("../../seaborn-data-master/dots.csv").query("align == 'dots'")
dots.head()
align | choice | time | coherence | firing_rate |
---|---|---|---|---|
0 | dots | T1 | -80 | 0.0 |
1 | dots | T1 | -80 | 3.2 |
2 | dots | T1 | -80 | 6.4 |
3 | dots | T1 | -80 | 12.8 |
4 | dots | T1 | -80 | 25.6 |
# 對不同的coherence(數字變數)調不同的顏色,以 choice 為依據劃分線條的類型
import matplotlib.pyplot as plt
plt.figure(figsize = (8,6))
sns.lineplot(
data = dots,
x = 'time',
y = 'firing_rate',
hue = 'coherence',
style = 'choice'
)
plt.legend(loc='upper left')
example 14
# 可以以python列表或字典的形式傳遞特定的顏色
import matplotlib.pyplot as plt
plt.figure(figsize = (8,6))
palette = sns.color_palette('mako_r', 6)
sns.lineplot(
data = dots,
x = 'time',
y = 'firing_rate',
hue = 'coherence',
style = 'choice',
palette = palette
)
plt.legend(loc='upper left')
example 15
# 不同 coherence 類別可以用不同粗細的線條畫出
plt.figure(figsize=(8,6))
sns.lineplot(
data = dots,
x = 'time',
y = 'firing_rate',
size = 'coherence',
hue = 'choice',
legend = 'full'
)
plt.legend(loc='upper left')
# 可以手動調節線條粗細的範圍區間
plt.figure(figsize=(8,6))
sns.lineplot(
data = dots,
x = 'time',
y = 'firing_rate',
size = 'coherence',
hue = 'choice',
sizes = (.25, 2.5) #定義最小值和最大值
)
plt.legend(loc='upper left')
example 16
# 預設情況下,繪圖時按 x 排序,若 調節 sort = False,則繪圖時按數據集中的順序繪製
import numpy as np
x, y = np.random.normal(size = (2, 5000)).cumsum(axis = 1)
sns.lineplot(x=x, y=y, lw=1)
sns.lineplot(x=x, y=y, sort=False, lw=1)
example 17
# 使用 replot() 分組繪圖,以參數 col 進行分組
sns.relplot(
data = fmri,
x = 'timepoint',
y = 'signal',
col = 'region',
hue = 'event',
style = 'event',
kind = 'line'
)