Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีวาด Scatter Plot 4 มิติ พร้อมสีและขนาดกำหนดเองใน Python Matplotlib

บทนำ

Scatter plot แสดงความสัมพันธ์ระหว่างสองตัวแปร สามารถเพิ่มมิติที่ 3 (ขนาดจุด) และมิติที่ 4 (สี) ได้

ขั้นตอน

  1. ติดตั้ง matplotlib: pip install matplotlib
  2. นำเข้าและเตรียมข้อมูล:
    import matplotlib.pyplot as plt
    import random
    
    tennis_stats = (('Federer', 20), ('Nadal', 20), ('Djokovic', 17), ...)
    titles = [t for _, t in tennis_stats]
    players = [p for p, _ in tennis_stats]
  3. จัดรูปแบบแกน X ให้เป็นจำนวนเต็ม:
    from matplotlib.ticker import FuncFormatter
    def format_titles(title, pos):
        return '{}'.format(int(title))
    plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
  4. กำหนดสีสุ่มและขนาดจุดสุ่ม:
    random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']
    color = [random.choice(random_colors) for _ in range(len(titles))]
    size = [(50 * random.random()) ** 2 for _ in range(len(titles))]
  5. วาด scatter plot:
    plt.xlabel('Grandslam Titles')
    plt.ylabel('Tennis Player')
    plt.scatter(titles, players, c=color, s=size, alpha=0.1)

โค้ดเต็ม

import matplotlib.pyplot as plt
import random
from matplotlib.ticker import FuncFormatter

tennis_stats = (('Federer', 20), ('Nadal', 20), ('Djokovic', 17),
                ('Sampras', 14), ('Emerson', 12), ('Laver', 11),
                ('Murray', 3), ('Wawrinka', 3), ('Zverev', 0),
                ('Thiem', 1), ('Medvedev', 0), ('Tsitsipas', 0),
                ('Dimitrov', 0), ('Rublev', 0))

titles = [t for _, t in tennis_stats]
players = [p for p, _ in tennis_stats]

def format_titles(title, pos):
    return '{}'.format(int(title))

random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']
color = [random.choice(random_colors) for _ in range(len(titles))]
size = [(50 * random.random()) ** 2 for _ in range(len(titles))]

plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
plt.xlabel('Grandslam Titles')
plt.ylabel('Tennis Player')
plt.scatter(titles, players, c=color, s=size, alpha=0.1)
plt.show()