極座標散布圖
這篇教學會延伸 matplotlib 的 scatter() 方法,搭配極座標的顯示模式,將資料繪製成極座標散布圖。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
import matplotlib
要進行本篇的範例,必須先載入 matplotlib 函式庫的 pyplot 模組,範例將其獨立命名為 plt。
import matplotlib.pyplot as plt
單一數據的極座標散布圖
下方的程式碼延伸了長條圖的做法,先將 x 軸的數據轉換為「弧度」,再將數據以長條圖的方式,顯示在極座標系統裡。
import matplotlib.pyplot as plt
x = range(10)
y = [7,8,5,12,6,10,19,13,5,9]
fig = plt.figure(figsize=(6,6))
plt.subplot(projection='polar') # 設定為極座標
plt.scatter(x,y,s=[i*100 for i in y],alpha=0.5) # 繪製散布圖
plt.show()
多組數據的極座標散布圖
下方的程式會透過極座標散布圖顯示多組數據資料,並額外設定每個資料點的的顏色和尺寸。
import matplotlib.pyplot as plt
import math
import random
x1 = [math.radians(random.randint(0,120)) for i in range(50)] # 隨機 30 個 0~360 度的數值,轉換成弧度
y1 = [random.randint(1,20) for i in range(50)] # 隨機 30 個 1~30 的數據
x2 = [math.radians(random.randint(120,240)) for i in range(50)] # 隨機 30 個 0~360 度的數值,轉換成弧度
y2 = [random.randint(1,20) for i in range(50)] # 隨機 30 個 1~30 的數據
x3 = [math.radians(random.randint(240,360)) for i in range(50)] # 隨機 30 個 0~360 度的數值,轉換成弧度
y3 = [random.randint(1,20) for i in range(50)] # 隨機 30 個 1~30 的數據
fig = plt.figure(figsize=(6,6))
ax = plt.subplot(projection='polar')
ax.scatter(x1,y1,
alpha=0.7,
s=[i*i*5 for i in y1],
c=y1,
cmap='autumn')
ax.scatter(x2,y2,
alpha=0.7,
s=[i*i*5 for i in y2],
c=y2,
cmap='winter')
ax.scatter(x3,y3,
alpha=0.7,
s=[i*i*5 for i in y3],
c=y3,
cmap='summer')
plt.show()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~