python根据时间序列画折线图_Python:matplotlib 和 Seaborn 之折线图 (三十七)
折線圖
折線圖是一種很常見的圖形,用于描繪一個數字變量相對于第二個變量的值的變化趨勢。在散點圖中,所有數據點都會繪制出來,而在折線圖中,每個唯一 x 值或 x 值的分箱僅繪制一個點(就像直方圖一樣)。如果 x 分箱中有多個觀測值,那么該點在折線圖中繪制的 y 值將為該數據點在分箱中的摘要統計值(例如均值或中值)。繪制的點用線條連接起來,表示 x 值的序列或相連特性。
如果 x 變量表示時間,則數據折線圖通常稱之為時間序列圖形。通常,在每個時間段內,我們只有一個觀測值,例如股票圖表或匯率圖表。雖然 seaborn 函數 tsplot 可以用于時間序列數據,但是它很特殊(撰寫本頁面時為 seaborn 0.8),計劃會出現很大的變化。
我們將使用 Matplotlib 的 errorbar 函數對數據進行處理,以便使數據變成必要格式。
plt.errorbar(data = df, x = 'num_var1', y = 'num_var2')
如果我們直接將 dataframe 傳入該函數中,而不考慮數據結構,那么可能會遇到上面的混亂情況。該函數將所有數據點都繪制成一個線條,將 dataframe 第一行的值與最后一行的值相連。為了按照預期方式創建折線圖,我們需要對數據進行額外的處理,以總結數據。
# set bin edges, compute centers
xbin_edges = np.arange(0.5, df['num_var1'].max()+0.25, 0.25)
xbin_centers = (xbin_edges + 0.25/2)[:-1]
# compute statistics in each bin
data_xbins = pd.cut(df['num_var1'], xbin_edges, right = False, include_lowest = True)
y_means = df['num_var2'].groupby(data_xbins).mean()
y_sems = df['num_var2'].groupby(data_xbins).sem()
# plot the summarized data
plt.errorbar(x = xbin_centers, y = y_means, yerr = y_sems)
因為 x 變量 ('num_var1') 是連續的,我們首先設置數據分組采用的分箱。除了常見的邊緣之外,還會計算每個分箱的中心,以便稍后繪制出來。對于每個分箱中的數據點,我們都計算均值和均值的標準差。注意這里的 cut 函數調用和上一部分的不一樣,因為我們不需要計算每個點的權重。
上述數據摘要的一個有趣的方面是,隨著 x 值的增大,均值的不確定性也會增大。但是對于兩個最大的數據點,沒有誤差條。從默認的 errorbar 圖形(或下面的散點圖)可以看出,這是因為最后兩個分箱分別只有一個數據點。
其他版本
你還可以通過使用 pandas 的 rolling 方法以滾動窗口的形式計算摘要統計值,而不是通過固定分箱計算摘要統計值。因為滾動窗口將通過 dataframe 的序列行進行計算,我們應該使用 sort_values 先使 x 值按升序排序。
# compute statistics in a rolling window
df_window = df.sort_values('num_var1').rolling(15)
x_winmean = df_window.mean()['num_var1']
y_median = df_window.median()['num_var2']
y_q1 = df_window.quantile(.25)['num_var2']
y_q3 = df_window.quantile(.75)['num_var2']
# plot the summarized data
base_color = sb.color_palette()[0]
line_color = sb.color_palette('dark')[0]
plt.scatter(data = df, x = 'num_var1', y = 'num_var2')
plt.errorbar(x = x_winmean, y = y_median, c = line_color)
plt.errorbar(x = x_winmean, y = y_q1, c = line_color, linestyle = '--')
plt.errorbar(x = x_winmean, y = y_q3, c = line_color, linestyle = '--')
plt.savefig('L4_C13_Lineplot3.png')
注意,在繪制圖形時,我們可以繪制多條線。如果挨個地調用多個 Matplotlib 函數,所有函數都會在相同的坐標軸上繪制。我們將繪制三個中央四分位數,并放在散點圖上方,而不是繪制均值和誤差條。
為者常成,行者常至
總結
以上是生活随笔為你收集整理的python根据时间序列画折线图_Python:matplotlib 和 Seaborn 之折线图 (三十七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请在贵网站的根目录下部署一个文件_使用
- 下一篇: 交强险赔付18000理赔详解 什么是交强