初探 Data Analysis - Matplotlib
发布时间:2026/8/14 14:36:42 作者:尧图编辑部 阅读量:1,286

前言本篇聚焦 Matplotlib 核心 APIplt.plot()之應用涵蓋 折線圖Line Plot的時間序列趨勢解析以及散佈圖Scatter Plot**的資料分佈與樣式調校實戰。從 StackExchange 取得每種程式語言的貼文總數作為實作資料來源。matplotlib.pyplot.plot()語法與參數說明plt.plot(x, y, fmt, dataNone, **kwargs)參數名稱資料型態 / 預設值說明x,yList / Array / Series資料的坐標值。• 支援傳入 List、NumPy Array 或 Pandas Series/Column。•若省略x僅傳入y系統預設自動產生[0, 1, ..., N-1]作為 X 軸索引。fmtstr(Format String)快捷樣式字串。用簡短代碼一次設定顏色 (Color)、標記 (Marker)與線條樣式 (Line Style)。範例r--o代表紅色 (r)、虛線 (--)、圓點標記 (o)。color/cstr線條顏色。支援顏色名稱或 Hex 色碼如blue,#FF5733。linestyle/lsstr線條樣式。常見選項-(實線)、--(虛線)、:(點線)、-.(點虛線)。markerstr數據點標記形狀。常見選項o(圓點)、s(方塊)、^(三角形)、x(叉號)。linewidth/lwfloat/int線條寬度預設粗細為1數值越大線條越粗。labelstr圖例標籤名稱。設定後需搭配plt.legend()呼叫才會在圖表上顯示圖例。測試資料來源透過在 StackExchange 上執行 SQL 查詢來取得每種程式語言的貼文總數資料點擊此連結從 [StackExchange](https://data.stackexchange.com/stackoverflow/query/675441/popular-programming-languages-per-over-time-eversql-com) 執行查詢以取得您自己的 .csv 文件畫單條線xpoints np.array([1, 8]) ypoints np.array([3, 10]) # 繪製兩個座標點,而不是一條線,可以使用 o 參數,表示一個實心圈的標記 plt.plot(xpoints, ypoints, o) plt.show()執行結果# 繪製一條不規則線 xpoints np.array([1, 2, 6, 8]) ypoints np.array([3, 8, 1, 10]) # marker 可以定義的符號 plt.plot(xpoints, ypoints,marker *) plt.show()執行結果範例 programming_posts.csvDate,Language,Posts2008-07-01 00:00:00,c#,32008-08-01 00:00:00,assembly,82008-08-01 00:00:00,c,812008-08-01 00:00:00,c,1642008-08-01 00:00:00,java,220......2026-07-01 00:00:00,go,42026-07-01 00:00:00,java,702026-07-01 00:00:00,javascript,732026-07-01 00:00:00,perl,62026-07-01 00:00:00,php,272026-07-01 00:00:00,python,1422026-07-01 00:00:00,r,542026-07-01 00:00:00,ruby,22026-07-01 00:00:00,swift,17實作讀取CSV檔案import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(csv_path, names[DATE, LANG, POSTS], header0) print(fdf.shape: {df.shape}, df.head()顯示前 5 列資料 :\n{df.head()})% python3 programming_posts.pydf.shape: (2999, 3), df.head()顯示前 5 列資料 :DATE LANG POSTS0 2008-07-01 00:00:00 c# 31 2008-08-01 00:00:00 assembly 82 2008-08-01 00:00:00 c 813 2008-08-01 00:00:00 c# 5034 2008-08-01 00:00:00 c 164# 日期轉換 df[DATE] pd.to_datetime( df[DATE] ) # 把 Language 變成 Columns pivot_df df.pivot( indexDATE, columnsLANG, valuesPOSTS ) # fillna() 用常數 0 填入所有缺失值.傳回一個新的 DataFrame(如果 inplaceFalse),或 None(如果 inplaceTrue) pivot_df.fillna( 0, inplaceTrue ) # 繪製折線圖 plt.plot(pivot_df.index, pivot_df.java, labeljava) plt.xticks(fontsize14) plt.yticks(fontsize14) plt.xlabel(DATE, fontsize14) plt.ylabel(Number of Posts, fontsize14) plt.ylim(0, 35000) plt.legend(fontsize14) plt.show()執行結果# 繪製各語言貼文折線圖 plt.figure(figsize(15,8)) for column in pivot_df.columns: plt.plot( pivot_df.index, pivot_df[column], labelcolumn ) plt.legend() plt.title(Programming Language Trend) plt.xlabel(Date) plt.ylabel(Posts) plt.show()執行結果# Rolling Mean 三個月平均 rolling_df pivot_df.rolling( window3 ).mean() plt.figure(figsize(18,9)) for column in rolling_df.columns: plt.plot( rolling_df.index, rolling_df[column], linewidth3, labelcolumn ) plt.legend() plt.grid() plt.xlabel(Year) plt.ylabel(Average Posts) plt.title(3-Month Rolling Average) plt.tight_layout() plt.show()執行結果