2023年7月14日 星期五

用Python程式來顯示百香果各市場交易箱形圖

以下是程式的解析流程:
  1. 導入必要的模組和套件,包括 requests 和 matplotlib.pyplot 用於發送 HTTP 請求和繪製圖表,以及 FontProperties 用於處理中文字型。
  2. 定義中文字型的檔案路徑,這是為了在圖表中正確顯示中文,請將其替換為你的中文字型檔案路徑。
  3. 透過 requests.get 方法發送 HTTP 請求獲取資料,並使用 response.json() 將回應轉換為 JSON 格式的資料。
  4. 創建一個空字典 markets 來儲存百香果在各市場的平均價格資料。
  5. 使用迴圈遍歷資料,如果作物名稱中包含 "百香果",則將該資料的市場名稱和平均價格提取出來。
  6. 將市場名稱作為鍵,將平均價格作為值,將它們添加到 markets 字典中。如果市場名稱已存在於字典中,則將該市場的平均價格附加到現有值的列表中,否則創建一個新的列表。
  7. 取得市場名稱列表 market_names 和對應的平均價格列表 market_prices。
  8. 使用 matplotlib.pyplot 繪製箱形圖,將 market_prices 的值作為資料繪製,並使用 market_names 作為 x 軸標籤。
  9. 設定圖表的標籤、標題和字型,包括 x 軸標籤、y 軸標籤、圖表標題、x 軸標籤的旋轉角度和字型、以及 y 軸字型。
  10. 使用 plt.tight_layout() 調整圖表佈局,以確保元素之間的間距正確。
  11. 顯示繪製的圖表。

 程式碼:

 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()

執行結果:





沒有留言:

張貼留言