Như một ví dụ đơn giản về biểu đồ phân tán, đối với một nhóm người, chúng tôi có thể ghi lại chiều cao và cỡ giày của họ. Sau đó, một biểu đồ phân tán sẽ bao gồm một dấu chấm cho mỗi người, cho biết chiều cao của họ [x] và cỡ giày [y]
Đây là mã để tạo một biểu đồ phân tán
import matplotlib.pyplot as plt height = [172, 171, 174, 169, 172, 173, 173, 177, 182, 180, 181, 179, 183, 181, 186, 184, 185, 189, 184, 187] shoe = [8.5, 7.0, 8.0, 8.0, 7.5, 9.0, 8.5, 8.0, 10.0, 9.5, 9.5, 8.0, 11.0, 9.5, 12.0, 11.5, 9.5, 12.0, 9.5, 11.0] plt.plot[height, shoe, 'bo'] plt.show[]
Chúng tôi đang sử dụng hàm
s = d0*d0 + d1*d1 + d2*d2 ...0 để tạo biểu đồ phân tán. Điều quan trọng ở đây là chuỗi
s = d0*d0 + d1*d1 + d2*d2 ...1 khai báo kiểu 'bo' cho biết màu xanh lam và dấu tròn, nhưng nó không chỉ định kiểu đường kẻ. Kiểu đánh dấu không có kiểu đường kẻ sẽ không vẽ đường, chỉ hiển thị các điểm đánh dấu
Mỗi cặp giá trị [x, y] tương ứng với chiều cao và cỡ giày của một người trong nghiên cứu. Vì vậy, trong dữ liệu ví dụ, người đầu tiên có chiều cao 182 cm và cỡ giày 8. 5, người tiếp theo có chiều cao 171 cm và cỡ giày 7, v.v. Dữ liệu sử dụng cỡ giày của Vương quốc Anh, các quốc gia khác sử dụng một hệ thống hoàn toàn khác với những con số rất khác nhau
Đây là biểu đồ nó tạo ra
Lắp một đường thẳng
Khi chúng tôi khớp một đường thẳng, chúng tôi cố gắng tìm một đường thể hiện tốt nhất dữ liệu. Nó sẽ là một xấp xỉ vì các điểm nằm rải rác xung quanh nên không có đường thẳng biểu thị chính xác dữ liệu
Một cách phổ biến để tìm một đường thẳng phù hợp với một số dữ liệu phân tán là phương pháp bình phương nhỏ nhất
Đối với một tập hợp các điểm
s = d0*d0 + d1*d1 + d2*d2 ...2 và một đường thẳng
s = d0*d0 + d1*d1 + d2*d2 ...3 đã cho, với mỗi điểm bạn tính khoảng cách,
s = d0*d0 + d1*d1 + d2*d2 ...0, giữa điểm và đường thẳng, như thế này
Sau đó chúng ta có thể tính tổng bình phương của khoảng cách
s = d0*d0 + d1*d1 + d2*d2 ...
Tổng này là thước đo tổng lỗi của đường khớp. Dòng tốt nhất là dòng có giá trị
s = d0*d0 + d1*d1 + d2*d2 ...1 nhỏ nhất
Có một công thức để tìm sự phù hợp nhất của một dòng với một tập hợp gồm 12 điểm dữ liệu và may mắn thay, NumPy đã triển khai công thức đó
import numpy as np m, c = np.polyfit[height, shoe, 1] print[m, c] # 0.21234550158091434 -28.65607933314174
s = d0*d0 + d1*d1 + d2*d2 ...3 lấy một mảng giá trị x, một mảng giá trị y và bậc đa thức. Đặt mức độ thành 1 sẽ phù hợp với đường thẳng
Các giá trị
s = d0*d0 + d1*d1 + d2*d2 ...4 và
s = d0*d0 + d1*d1 + d2*d2 ...5 cắm vào phương trình chuẩn của một đường thẳng
y = m*x + c
Đây là một đường cắt qua trục y tại
s = d0*d0 + d1*d1 + d2*d2 ...5 và có độ dốc là
s = d0*d0 + d1*d1 + d2*d2 ...4. Sử dụng các giá trị từ đoạn mã trên, dòng này xấp xỉ
s = d0*d0 + d1*d1 + d2*d2 ...2
Vẽ đồ thị đường thẳng
Quay trở lại dữ liệu đơn ban đầu, bây giờ chúng ta có thể thêm một đường thẳng phù hợp với dữ liệu. Chúng ta chỉ cần chọn hai giá trị cho
s = d0*d0 + d1*d1 + d2*d2 ...8 và tính các giá trị tương ứng cho
s = d0*d0 + d1*d1 + d2*d2 ...9. Sau đó chúng ta có thể vẽ một đường thẳng nối hai điểm
- Khi
s = d0*d0 + d1*d1 + d2*d2 ...
8 là 169, thìs = d0*d0 + d1*d1 + d2*d2 ...
9 là khoảng 7. 23 - Khi
s = d0*d0 + d1*d1 + d2*d2 ...
8 là 189, thìs = d0*d0 + d1*d1 + d2*d2 ...
9 là khoảng 11. 48
Đây là mã để vẽ biểu đồ phân tán và đường được trang bị
s = d0*d0 + d1*d1 + d2*d2 ...9
Chúng tôi đã thêm một biểu đồ chứa hai điểm, với kiểu "k--", tạo ra một đường đứt nét màu đen
Đây là kết quả. Biểu đồ phân tán được vẽ như trước đây, nhưng chúng tôi cũng vẽ một đường đứt nét màu đen thể hiện sự phù hợp nhất của một đường thẳng với dữ liệu
Xem thêm
- Biểu đồ đường trong Matplotlib
- Nhiều sơ đồ dòng trong Matplotlib
- Biểu đồ phân tán trong Matplotlib
Nếu bạn thấy bài viết này hữu ích, bạn có thể quan tâm đến cuốn sách Công thức NumPy hoặc các cuốn sách khác của cùng tác giả