- 導入必要的模組和套件,包括 requests 和 matplotlib.pyplot 用於發送 HTTP 請求和繪製圖表,以及 FontProperties 用於處理中文字型。
- 定義中文字型的檔案路徑,這是為了在圖表中正確顯示中文,請將其替換為你的中文字型檔案路徑。
- 透過 requests.get 方法發送 HTTP 請求獲取資料,並使用 response.json() 將回應轉換為 JSON 格式的資料。
- 創建一個空字典 markets 來儲存百香果在各市場的平均價格資料。
- 使用迴圈遍歷資料,如果作物名稱中包含 "百香果",則將該資料的市場名稱和平均價格提取出來。
- 將市場名稱作為鍵,將平均價格作為值,將它們添加到 markets 字典中。如果市場名稱已存在於字典中,則將該市場的平均價格附加到現有值的列表中,否則創建一個新的列表。
- 取得市場名稱列表 market_names 和對應的平均價格列表 market_prices。
- 使用 matplotlib.pyplot 繪製箱形圖,將 market_prices 的值作為資料繪製,並使用 market_names 作為 x 軸標籤。
- 設定圖表的標籤、標題和字型,包括 x 軸標籤、y 軸標籤、圖表標題、x 軸標籤的旋轉角度和字型、以及 y 軸字型。
- 使用 plt.tight_layout() 調整圖表佈局,以確保元素之間的間距正確。
- 顯示繪製的圖表。
程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import requests import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties # 設置中文字體 font = FontProperties(fname='C:\Windows\Fonts\kaiu.ttf') response = requests.get('https://data.coa.gov.tw/Service/OpenData/FromM/FarmTransData.aspx') data = response.json() markets = {} # 市場名稱與價格的字典 # 收集百香果在各市場的平均價格資料 for row in data: if '百香果' in row['作物名稱']: market = row['市場名稱'] price = row['平均價'] if market in markets: markets[market].append(price) else: markets[market] = [price] # 取得市場名稱列表 market_names = list(markets.keys()) # 取得每個市場的平均價格列表 market_prices = list(markets.values()) # 繪製圖表 plt.figure(figsize=(12, 6)) plt.boxplot(market_prices, labels=market_names) plt.xlabel('市場名稱', fontproperties=font) # 設定中文標籤 plt.ylabel('平均價格', fontproperties=font) # 設定中文標籤 plt.title('百香果在各市場的平均價格分佈', fontproperties=font) # 設定中文標題 plt.xticks(rotation=45, fontproperties=font) # 設定 x 軸標籤旋轉角度和字型 plt.yticks(fontproperties=font) # 設定 y 軸字型 plt.tight_layout() # 調整圖表佈局 plt.show() |
執行結果:
沒有留言:
張貼留言