Bài 18: Scatter Plot ( Biểu đồ phân tán ) - Matplotib Cơ Bản

Đăng bởi: Admin | Lượt xem: 8816 | Chuyên mục: AI


1. Khái niệm cơ bản :

Biểu đồ phân tán được sử dụng để vẽ các điểm dữ liệu trên trục hoành và trục tung để thể hiện mức độ ảnh hưởng của một biến này bởi biến khác. Mỗi hàng trong bảng dữ liệu được biểu thị bằng một điểm đánh dấu, vị trí phụ thuộc vào giá trị của nó trong các cột được đặt trên trục X và Y. Một biến thứ ba có thể được đặt để tương ứng với màu sắc hoặc kích thước của các điểm đánh dấu, do đó thêm một chiều khác vào biểu đồ.
Ví dụ dưới đây vẽ một biểu đồ phân tán của các cấp lớp so với cấp độ của nam và nữ bằng hai màu sắc khác nhau.
import matplotlib.pyplot as plt
girls_grades = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34]
boys_grades = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30]
grades_range = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(grades_range, girls_grades, color='r')
ax.scatter(grades_range, boys_grades, color='b')
ax.set_xlabel('Grades Range')
ax.set_ylabel('Grades Scored')
ax.set_title('scatter plot')
plt.show()

2. Ví dụ minh hoạ :

Ví dụ 1 :Biểu diễn biểu đồ phân tán với các màu và kích thước điểm đánh dấu khác nhau.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook

# Load a numpy record array from yahoo csv data with fields date, open, close,
# volume, adj_close from the mpl-data/example directory. The record array
# stores the date as an np.datetime64 with a day unit ('D') in the date column.
with cbook.get_sample_data('goog.npz') as datafile:
    price_data = np.load(datafile)['price_data'].view(np.recarray)
price_data = price_data[-250:]  # get the most recent 250 trading days

delta1 = np.diff(price_data.adj_close) / price_data.adj_close[:-1]

# Marker size in units of points^2
volume = (15 * price_data.volume[:-2] / price_data.volume[0])**2
close = 0.003 * price_data.close[:-2] / 0.003 * price_data.open[:-2]

fig, ax = plt.subplots()
ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5)

ax.set_xlabel(r'$\Delta_i$', fontsize=15)
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15)
ax.set_title('Volume and percent change')

ax.grid(True)
fig.tight_layout()

plt.show()
Ví dụ 2 :
import numpy as np
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
Ví dụ 3 : Sử dụng keywords để tạo plot
Có một số trường hợp bạn có dữ liệu ở dạng cho phép bạn truy cập các biến cụ thể bằng chuỗi. Ví dụ: numpy.recarray hoặc pandas.DataFrame.
Matplotlib cho phép ta cung cấp một đối tượng như vậy với đối số từ khóa dữ liệu. Nếu được cung cấp, có thể tạo các plot các chuỗi tương ứng với các biến này.
import matplotlib.pyplot as plt
np.random.seed(19680801)

data = {'a': np.arange(50),
        'c': np.random.randint(0, 50, 50),
        'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100

fig, ax = plt.subplots()
ax.scatter('a', 'b', c='c', s='d', data=data)
ax.set(xlabel='entry a', ylabel='entry b')
plt.show()
Bài tiếp theo: Contour Plot ( Đồ thị đường bao ) >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!