3D Plotting
ทำความรู้จักกับ 3D Plotting
3D Plotting คือการสร้างกราฟหรือการแสดงข้อมูลในรูปแบบสามมิติ โดยทั่วไปแล้วการแสดงข้อมูลมักจะมีแกนสองแกนคือแกน X (แนวนอน) และแกน Y (แนวตั้ง) ในการทำ 2D Plotting แต่สำหรับ 3D Plotting จะมีการเพิ่มแกนที่สามเข้ามา คือแกน Z ซึ่งเป็นแกนที่ให้มิติเพิ่มเติมในเชิงลึก ทำให้กราฟที่แสดงผลออกมาสามารถมองเห็นความสัมพันธ์ของข้อมูลในสามมิติ
การทำ 3D Plotting มีประโยชน์ในการแสดงข้อมูลที่มีความซับซ้อนหรือต้องการแสดงความสัมพันธ์ของข้อมูลในมิติที่มากกว่า 2 มิติ เช่น:
- การแสดงผลการกระจายตัวของข้อมูลในรูปแบบสามมิติ
- การแสดงผลพื้นผิว (Surface Plots) ที่มีตัวแปรในสามมิติ
- การแสดงผลฟังก์ชันทางคณิตศาสตร์ในรูปแบบสามมิติ
ตัวอย่างการใช้งาน 3D Plotting ใน Python
สามารถใช้ไลบรารี matplotlib
เพื่อสร้างกราฟแบบ 3 มิติได้ โดยสามารถใช้โมดูล mpl_toolkits.mplot3d
ของ matplotlib
ในการสร้างกราฟ 3D
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# สร้างข้อมูลสำหรับแกน X, Y, Z
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# สร้างกราฟ 3D
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# plot surface
ax.plot_surface(x, y, z, cmap='viridis')
# เพิ่มหัวข้อและแกน
ax.set_title('3D Surface Plot of sin(sqrt(x^2 + y^2))')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
# แสดงกราฟ
plt.show()
ผลลัพธ์
3D Plot ประเภทอื่นๆ
3D Scatter Plots, Wireframes, และ Surface Plots เป็นวิธีการแสดงผลข้อมูลแบบสามมิติ (3D) ที่ใช้ในการทำกราฟหรือการแสดงผลข้อมูลในเชิงลึกและซับซ้อนมากขึ้น แต่ละรูปแบบมีจุดประสงค์และลักษณะเฉพาะตัวที่ช่วยในการนำเสนอข้อมูลในมุมมองที่แตกต่างกัน
3D Scatter Plot
3D Scatter Plot คือการแสดงจุดข้อมูล (data points) ในพื้นที่สามมิติ โดยจุดแต่ละจุดจะถูกแสดงในตำแหน่งที่สัมพันธ์กันตามค่าของแกน X, Y และ Z ช่วยให้เห็นการกระจายตัวของข้อมูลในสามมิติ
code python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# สร้างข้อมูลแบบสุ่มสำหรับแกน X, Y, Z
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
# สร้างกราฟ 3D Scatter Plot
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# plot จุดข้อมูล
ax.scatter(x, y, z, c='r', marker='o')
# เพิ่มหัวข้อและแกน
ax.set_title('3D Scatter Plot')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
# แสดงผล
plt.show()
ผลลัพธ์
Wireframe Plot
Wireframe Plot คือการแสดงโครงสร้างพื้นผิวสามมิติในลักษณะของเส้นลวด (wireframe) โดยไม่มีการเติมสีพื้นผิว การแสดงในรูปแบบนี้มักจะใช้ในการสร้างโครงสร้างพื้นฐานของกราฟที่มีความซับซ้อน ช่วยให้เห็นรูปแบบโดยรวมของข้อมูลได้ง่าย
code python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# สร้างข้อมูลสำหรับแกน X, Y, Z
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# สร้างกราฟ Wireframe
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# plot wireframe
ax.plot_wireframe(x, y, z, color='blue')
# เพิ่มหัวข้อและแกน
ax.set_title('3D Wireframe Plot')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
# แสดงผล
plt.show()
ผลลัพธ์
Surface Plot
Surface Plot คือการแสดงผลข้อมูลในลักษณะของพื้นผิว (surface) ที่เต็มไปด้วยสีและพื้นผิวตามค่าของแกน Z การแสดงผลในรูปแบบนี้ช่วยให้สามารถมองเห็นความแตกต่างของค่าบนพื้นผิวในแต่ละจุดได้อย่างชัดเจน
code python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# สร้างข้อมูลสำหรับแกน X, Y, Z
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# สร้างกราฟ Surface Plot
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# plot surface
surface = ax.plot_surface(x, y, z, cmap='viridis')
# เพิ่มหัวข้อและแกน
ax.set_title('3D Surface Plot')
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
# เพิ่ม color bar เพื่อบอกค่า Z
fig.colorbar(surface)
# แสดงผล
plt.show()
ผลลัพธ์
ตัวอย่างอื่นๆ
การสร้าง 3D plots โดยใช้ข้อมูลจากไฟล์ CSV สามารถทำได้โดยการโหลดข้อมูลเข้าสู่ Python ผ่านไลบรารีอย่างเช่น pandas
และใช้ไลบรารี matplotlib
ในการสร้าง 3D plot ตัวอย่างต่อไปนี้จะแสดงการสร้าง 3D scatter plot, wireframe plot และ surface plot โดยใช้ข้อมูลจากไฟล์ CSV
ตัวอย่าง sales_data.csv
Time,Price,Sales Volume
1,200,50
2,250,65
3,300,70
4,320,80
5,400,95
6,450,100
7,500,110
8,550,120
9,600,130
10,620,150
ตัวอย่าง code python
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# อ่านข้อมูลจากไฟล์ CSV
df = pd.read_csv('sales_data.csv')
# สร้างกราฟ 3D Scatter Plot
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
# กำหนดข้อมูลสำหรับแกน X, Y, Z
x = df['Time'] # แกน X เป็น Time
y = df['Price'] # แกน Y เป็น Price
z = df['Sales Volume'] # แกน Z เป็น Sales Volume
# plot ข้อมูลในรูปแบบ 3D scatter plot
scatter = ax.scatter(x, y, z, c=z, cmap='viridis', marker='o')
# เพิ่มหัวข้อและแกน
ax.set_title('3D Sales Data Scatter Plot')
ax.set_xlabel('Time')
ax.set_ylabel('Price')
ax.set_zlabel('Sales Volume')
# เพิ่ม color bar เพื่อแสดงค่าของ Sales Volume
fig.colorbar(scatter, ax=ax, label='Sales Volume')
# แสดงผล
plt.show()
ผลลัพธ์
การใช้ Generative AI ช่วย Plot
หากเรามี data และเรายังไม่รู้ว่าจะ render ออกมาเป็นยังไง สามารถใช้ Generative AI อย่าง ChatGPT, Claude, Gemini ในการช่วยให้คำแนะนำ render ได้
เช่น จากตัวอย่างนี้คือ ChatGPT โดยเราสามารถ upload ข้อมูล csv เข้าไป เพื่อให้ python ทำการ plot ตาม csv ที่ upload เข้าไปได้
รวมถึงสามารถกดดู python code เพื่อเอามาพัฒนาต่อได้เช่นกัน
จริงๆ ในเจ้าอื่นๆเอง (Claude, Gemini) ก็สามารถทำได้เช่นกัน แต่สำหรับ 2 ตัวนี้ถ้าเป็นตัวฟรี จะออกมาเพียงแค่ Code แต่ก็สามารถนำ python code มาทดสอบ run บน local ของเราได้เช่นกันนะครับ (เป็นเหมือนตัวช่วยให้คำแนะนำได้)
คำแนะนำสำหรับการใช้งานร่วมกับ Generative AI
- พยายามรู้สึกและทำความเข้าใจ Graph แต่ละประเภท
- ให้ Generative AI plot Graph ประเภทนั้นๆ โดยอ้างอิงตามข้อมูลที่มี
จะประหยัดเวลาในการทำ vistualization ได้มากเช่นกัน