Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?

Giới thiệu ..

Biểu đồ phân tán rất hữu ích khi biểu diễn dữ liệu với hai thứ nguyên để xác minh xem có bất kỳ mối quan hệ nào giữa hai biến hay không. Biểu đồ phân tán là biểu đồ trong đó dữ liệu được biểu thị dưới dạng các chấm có giá trị X và Y.

Cách thực hiện ..

1. Cài đặt matplotlib bằng lệnh sau.

pip install matplotlib

2. Nhập matplotlib

import matplotlib.pyplot as plt
tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0))

3. Bước tiếp theo là chuẩn bị dữ liệu ở bất kỳ định dạng mảng nào. Chúng tôi cũng có thể đọc dữ liệu từ cơ sở dữ liệu hoặc từ bảng tính và định dạng dữ liệu ở định dạng bên dưới.

titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]

4. Các tham số cho .scatter, cũng như các phương thức khác của matplotlib, yêu cầu một mảng các giá trị X và Y.

* Lưu ý - Các giá trị * X và Y đều cần có cùng kích thước và dữ liệu cũng được chuyển đổi theo mặc định thành một số thực.

plt.scatter(titles, players)


<matplotlib.collections.PathCollection at 0x28df3684ac0>

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?

5. Ồ, các tiêu đề GrandSlam của tôi được vẽ trên trục x là một phao. Tôi sẽ chuyển đổi chúng thành số nguyên và cũng thêm tiêu đề cho trục x và trục y trong hàm bên dưới. Trình định dạng trục sẽ được ghi đè bằng .set_major_formatter.

from matplotlib.ticker import FuncFormatter
def format_titles(title, pos):
return '{}'.format(int(title))

plt.gca().xaxis.set_major_formatter(FuncFormatter(format_titles))
plt.xlabel('Grandslam Titles')
plt.ylabel('Tennis Player')
plt.scatter(titles, players)

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?

6. Đừng nghĩ về biểu đồ phân tán chỉ là một biểu đồ 2D, biểu đồ phân tán cũng có thể thêm một chiều thứ ba (diện tích) và thậm chí là chiều thứ tư (màu sắc). Hãy để tôi giải thích một chút những gì tôi sẽ làm bên dưới.

Đầu tiên, chúng tôi sẽ xác định các màu bạn chọn và sau đó lặp lại chúng qua việc chọn ngẫu nhiên các màu và gán giá trị tham quan cho nó.

Giá trị alpha làm cho mỗi điểm nửa trong suốt, cho phép chúng ta xem chúng chồng lên nhau ở đâu. Giá trị này càng cao thì điểm càng kém minh bạch.

import random

# define your own color scale.
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']

# set the number of colors similar to our data values
color = [random.choice(random_colors) for _ in range(len(titles))]

plt.scatter(titles, players, c=color, alpha=0.5)


<matplotlib.collections.PathCollection at 0x28df2242d00>

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?

7. Bây giờ tôi, chúng ta hãy làm cho kích thước / khu vực biểu diễn lớn hơn một chút.

import random

# define your own color scale.
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']

# set the number of colors similar to our data values
color = [random.choice(random_colors) for _ in range(len(titles))]

# set the size
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)


<matplotlib.collections.PathCollection at 0x28df22e2430>

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?

Hãy nhớ rằng, mục tiêu cuối cùng của biểu đồ là làm cho dữ liệu dễ hiểu.

Tôi đã chỉ ra những điều cơ bản về những gì bạn có thể làm với biểu đồ phân tán. Ví dụ, bạn có thể làm được nhiều hơn thế, làm cho màu sắc phụ thuộc vào kích thước để làm cho tất cả các điểm có cùng kích thước đều có màu giống nhau, điều này có thể giúp chúng tôi phân biệt giữa các dữ liệu.

Khám phá thêm - https://matplotlib.org/.

Cuối cùng, kết hợp mọi thứ lại với nhau.

Ví dụ

# imports
import matplotlib.pyplot as plt
import random

# preparing data..
tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Sampras', 14),('Emerson', 12),('laver', 11),('Murray', 3),('Wawrinka', 3),('Zverev', 0),('Theim', 1),('Medvedev',0),('Tsitsipas', 0),('Dimitrov', 0),('Rublev', 0))

titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]

# custom function
from matplotlib.ticker import FuncFormatter
def format_titles(title, pos):
return '{}'.format(int(title))

# define your own color scale.
random_colors = ['#FF0000', '#FFFF00', '#FFFFF0', '#FFFFFF', '#00000F']

# set the number of colors similar to our data values
color = [random.choice(random_colors) for _ in range(len(titles))]

# set the size
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)


<matplotlib.collections.PathCollection at 0x2aa7676b670>

Làm thế nào để vẽ biểu đồ phân tán 4D với màu sắc tùy chỉnh và kích thước vùng cắt trong Python Matplotlib?