Một loại cốt truyện thường được sử dụng khác là cốt truyện phân tán đơn giản, một người anh em họ gần gũi của cốt truyện. Thay vì các điểm được nối bởi các phân đoạn dòng, ở đây các điểm được biểu diễn riêng lẻ với một dấu chấm, vòng tròn hoặc hình dạng khác. Chúng tôi sẽ bắt đầu bằng cách thiết lập máy tính xách tay để vẽ và nhập các chức năng mà chúng tôi sẽ sử dụng:
In [1]:
%matplotlib inline import matplotlib.pyplot as plt plt.style.use['seaborn-whitegrid'] import numpy as np
Sơ đồ phân tán với ________ 7¶
Trong phần trước, chúng tôi đã xem xét ________ 7/________ 9 để tạo ra các lô đường. Nó chỉ ra rằng chức năng tương tự này cũng có thể tạo ra các sơ đồ phân tán:
In [2]:
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];
Đối số thứ ba trong lệnh gọi hàm là một ký tự đại diện cho loại biểu tượng được sử dụng cho âm mưu. Giống như bạn có thể chỉ định các tùy chọn như
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];0,
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];1 Để kiểm soát kiểu đường, kiểu đánh dấu có bộ mã chuỗi ngắn riêng. Danh sách đầy đủ các biểu tượng có sẵn có thể được nhìn thấy trong tài liệu của
plt.plot
hoặc trong tài liệu trực tuyến của Matplotlib. Hầu hết các khả năng đều khá trực quan và chúng tôi sẽ hiển thị một số trong số những điều phổ biến hơn ở đây:In [3]:
rng = np.random.RandomState[0] for marker in ['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']: plt.plot[rng.rand[5], rng.rand[5], marker, label="marker='{0}'".format[marker]] plt.legend[numpoints=1] plt.xlim[0, 1.8];
Đối với nhiều khả năng hơn nữa, các mã ký tự này có thể được sử dụng cùng với mã dòng và màu sắc để vẽ các điểm cùng với một dòng kết nối chúng:
Các đối số từ khóa bổ sung để plt.plot
Chỉ định một loạt các thuộc tính của các dòng và điểm đánh dấu:
In [5]:
plt.plot[x, y, '-p', color='gray', markersize=15, linewidth=4, markerfacecolor='white', markeredgecolor='gray', markeredgewidth=2] plt.ylim[-1.2, 1.2];
Loại linh hoạt này trong hàm plt.plot
cho phép nhiều tùy chọn trực quan có thể. Để biết mô tả đầy đủ về các tùy chọn có sẵn, hãy tham khảo tài liệu plt.plot
.
Sơ đồ phân tán với ________ 16¶
Một phương pháp thứ hai, mạnh mẽ hơn để tạo các sơ đồ phân tán là hàm
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6, có thể được sử dụng rất giống với hàm
plt.plot
:In [6]:
plt.scatter[x, y, marker='o'];
Sự khác biệt chính của
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6 từ
plt.plot
là nó có thể được sử dụng để tạo các sơ đồ phân tán trong đó các thuộc tính của từng điểm riêng lẻ [kích thước, màu mặt, màu cạnh, v.v.] có thể được kiểm soát hoặc ánh xạ riêng lẻ vào dữ liệu.Hãy thể hiện điều này bằng cách tạo ra một sơ đồ phân tán ngẫu nhiên với các điểm có nhiều màu sắc và kích thước. Để xem tốt hơn các kết quả chồng chéo, chúng tôi cũng sẽ sử dụng từ khóa
rng = np.random.RandomState[0] for marker in ['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']: plt.plot[rng.rand[5], rng.rand[5], marker, label="marker='{0}'".format[marker]] plt.legend[numpoints=1] plt.xlim[0, 1.8];1 để điều chỉnh mức độ minh bạch:
In [7]:
rng = np.random.RandomState[0] x = rng.randn[100] y = rng.randn[100] colors = rng.rand[100] sizes = 1000 * rng.rand[100] plt.scatter[x, y, c=colors, s=sizes, alpha=0.3, cmap='viridis'] plt.colorbar[]; # show color scale
Lưu ý rằng đối số màu được tự động ánh xạ tới thang màu [hiển thị ở đây bởi lệnh
rng = np.random.RandomState[0] for marker in ['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']: plt.plot[rng.rand[5], rng.rand[5], marker, label="marker='{0}'".format[marker]] plt.legend[numpoints=1] plt.xlim[0, 1.8];2] và đối số kích thước được đưa ra trong pixel. Theo cách này, màu sắc và kích thước của các điểm có thể được sử dụng để truyền đạt thông tin trong trực quan hóa, để trực quan hóa dữ liệu đa chiều.
Ví dụ, chúng tôi có thể sử dụng dữ liệu iris từ Scikit-learn, trong đó mỗi mẫu là một trong ba loại hoa có kích thước của cánh hoa và sepal được đo cẩn thận:
In [8]:
from sklearn.datasets import load_iris iris = load_iris[] features = iris.data.T plt.scatter[features[0], features[1], alpha=0.2, s=100*features[3], c=iris.target, cmap='viridis'] plt.xlabel[iris.feature_names[0]] plt.ylabel[iris.feature_names[1]];
Chúng ta có thể thấy rằng biểu đồ phân tán này đã cho chúng ta khả năng khám phá đồng thời bốn chiều khác nhau của dữ liệu: vị trí [x, y] của mỗi điểm tương ứng với chiều dài và chiều rộng của sepal, kích thước của điểm có liên quan đến cánh hoa chiều rộng, và màu sắc có liên quan đến các loài hoa cụ thể. Các sơ đồ phân tán nhiều màu và đa năng như thế này có thể hữu ích cho cả thăm dò và trình bày dữ liệu.
rng = np.random.RandomState[0]
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']:
plt.plot[rng.rand[5], rng.rand[5], marker,
label="marker='{0}'".format[marker]]
plt.legend[numpoints=1]
plt.xlim[0, 1.8];
3 so với rng = np.random.RandomState[0]
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '', 's', 'd']:
plt.plot[rng.rand[5], rng.rand[5], marker,
label="marker='{0}'".format[marker]]
plt.legend[numpoints=1]
plt.xlim[0, 1.8];
4: Một lưu ý về Hiệu quả Jo
Ngoài các tính năng khác nhau có sẵn trong plt.plot
và
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6, tại sao bạn có thể chọn sử dụng cái này hơn cái kia? Mặc dù không quan trọng đối với một lượng nhỏ dữ liệu, vì các bộ dữ liệu lớn hơn vài nghìn điểm,
plt.plot
có thể hiệu quả hơn đáng kể so với x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6. Lý do là
x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6 có khả năng hiển thị một kích thước và/hoặc màu khác nhau cho mỗi điểm, do đó, trình kết xuất phải thực hiện công việc thêm để xây dựng từng điểm riêng lẻ. Mặt khác, trong ____77, các điểm luôn là bản sao của nhau, vì vậy công việc xác định sự xuất hiện của các điểm chỉ được thực hiện một lần cho toàn bộ tập hợp dữ liệu. Đối với các bộ dữ liệu lớn, sự khác biệt giữa hai người này có thể dẫn đến hiệu suất rất khác nhau và vì lý do này,
plt.plot
nên được ưu tiên hơn x = np.linspace[0, 10, 30] y = np.sin[x] plt.plot[x, y, 'o', color='black'];6 cho các bộ dữ liệu lớn.