Tự Học Data Science · 16/01/2024 0

04.01 Simple Line Plots

Điều chỉnh Plot: Màu và Styles dòng

Điều chỉnh đầu tiên bạn có thể muốn thực hiện với một biểu đồ là điều khiển màu và kiểu đường.Hàm plt.plot() nhận thêm các tham số có thể được sử dụng để xác định chúng.Để điều chỉnh màu, bạn có thể sử dụng từ khóa color, nó chấp nhận một đối số chuỗi thể hiện hầu hết bất kỳ màu sắc nào có thể tưởng tượng được.Màu sắc có thể được chỉ định theo nhiều cách khác nhau:

plt.plot(x, np.sin(x - 0), color='blue')        # specify color by nameplt.plot(x, np.sin(x - 1), color='g')           # short color code (rgbcmyk)plt.plot(x, np.sin(x - 2), color='0.75')        # Grayscale between 0 and 1plt.plot(x, np.sin(x - 3), color='#FFDD44')     # Hex code (RRGGBB from 00 to FF)plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB tuple, values 0 to 1plt.plot(x, np.sin(x - 5), color='chartreuse'); # all HTML color names supported
ảnh ví dụ - data science lại blog của lưu

Nếu không có màu được chỉ định, Matplotlib sẽ tự động lặp lại một tập hợp màu mặc định cho nhiều đường.

Tương tự, kiểu dòng cũng có thể được điều chỉnh bằng cách sử dụng từ khoá linestyle:

plt.plot(x, x + 0, linestyle='solid')plt.plot(x, x + 1, linestyle='dashed')plt.plot(x, x + 2, linestyle='dashdot')plt.plot(x, x + 3, linestyle='dotted');# For short, you can use the following codes:plt.plot(x, x + 4, linestyle='-')  # solidplt.plot(x, x + 5, linestyle='--') # dashedplt.plot(x, x + 6, linestyle='-.') # dashdotplt.plot(x, x + 7, linestyle=':');  # dotted
ảnh ví dụ - data science lại blog của lưu

Nếu bạn muốn rất ngắn gọn, các mã linestylecolor này có thể được kết hợp thành một đối số không từ khóa duy nhất cho hàm plt.plot():

plt.plot(x, x + 0, '-g')  # solid greenplt.plot(x, x + 1, '--c') # dashed cyanplt.plot(x, x + 2, '-.k') # dashdot blackplt.plot(x, x + 3, ':r');  # dotted red
ảnh ví dụ - data science lại blog của lưu

Các mã màu 1 ký tự này phản ánh các từ viết tắt tiêu chuẩn trong hệ thống màu RGB (Đỏ/Xanh lá cây/Xanh biển) và CMYK (Xanh da trời/Hồng/Màu vàng/Đen), thường được sử dụng cho đồ hoạ màu số.

Có nhiều các tham số khác có thể được sử dụng để điều chỉnh một cách tinh vi hiển thị của biểu đồ; để biết thêm chi tiết, tôi đề nghị xem hướng dẫn của hàm plt.plot() bằng cách sử dụng các công cụ giúp đỡ của IPython (Xem Trợ giúp và Tài liệu trong IPython).

Điều chỉnh Đồ thị: Giới hạn trục

Matplotlib làm một công việc tốt trong việc chọn giới hạn trục mặc định cho đồ thị của bạn, nhưng đôi khi việc có sự kiểm soát tinh vi là rất tốt.Cách đơn giản nhất để điều chỉnh giới hạn trục là sử dụng các phương thức plt.xlim()plt.ylim():

plt.plot(x, np.sin(x))plt.xlim(-1, 11)plt.ylim(-1.5, 1.5);
ảnh ví dụ - data science lại blog của lưu

Nếu vì một lý do nào đó bạn muốn hiển thị trục nào đó theo chiều ngược lại, bạn có thể đơn giản chỉ cần đảo ngược thứ tự của các đối số:

plt.plot(x, np.sin(x))plt.xlim(10, 0)plt.ylim(1.2, -1.2);
ảnh ví dụ - data science lại blog của lưu

Một phương thức liên quan hữu ích là plt.axis() (lưu ý ở đây là sự nhầm lẫn tiềm năng giữa axes với e, và axis với i).Phương thức plt.axis() cho phép bạn đặt các giới hạn xy trong một cuộc gọi duy nhất, bằng cách truyền một danh sách xác định [xmin, xmax, ymin, ymax]:

plt.plot(x, np.sin(x))plt.axis([-1, 11, -1.5, 1.5]);
ảnh ví dụ - data science lại blog của lưu

Phương thức plt.axis() còn cho phép bạn làm thậm chí hơn nữa, cho phép bạn làm những điều như siết chặt giới hạn xung quanh biểu đồ hiện tại một cách tự động:

plt.plot(x, np.sin(x))plt.axis('tight');
ảnh ví dụ - data science lại blog của lưu

Nó cho phép thậm chí các chỉ định cấp cao hơn, như đảm bảo tỉ lệ khung hình bằng nhau để trên màn hình của bạn, một đơn vị trong x bằng một đơn vị trong y:

plt.plot(x, np.sin(x))plt.axis('equal');
ảnh ví dụ - data science lại blog của lưu

Để biết thêm thông tin về giới hạn trục và các khả năng khác của phương thức plt.axis, hãy tham khảo docstring của plt.axis.

Đặt nhãn cho Đồ thị

Như phần cuối của phần này, chúng ta sẽ tìm hiểu qua về nhãn của biểu đồ: tiêu đề, nhãn trục và huy chương đơn giản.

Tiêu đề và nhãn trục là nhãn đơn giản nhất như vậy – có các phương pháp có thể được sử dụng để nhanh chóng thiết lập chúng:

plt.plot(x, np.sin(x))plt.title("A Sine Curve")plt.xlabel("x")plt.ylabel("sin(x)");
ảnh ví dụ - data science lại blog của lưu

Vị trí, kích thước và kiểu dáng của những nhãn này có thể được điều chỉnh bằng cách sử dụng các đối số tùy chọn cho hàm.Để biết thêm thông tin, hãy xem tài liệu Matplotlib và các chuỗi tài liệu của mỗi chức năng này.

Khi hiển thị nhiều dòng trên một trục duy nhất, việc tạo một huy hiệu biểu thị cho mỗi loại đường có thể hữu ích.Một lần nữa, Matplotlib có một cách tích hợp để nhanh chóng tạo một huy hiệu như vậy.Việc này được thực hiện thông qua phương thức (như bạn đã đoán) plt.legend().Dù có một vài cách hợp lệ để sử dụng điều này, tôi thấy dễ nhất là chỉ định nhãn cho mỗi dòng bằng cách sử dụng từ khóa label của hàm đồ thị:

plt.plot(x, np.sin(x), '-g', label='sin(x)')plt.plot(x, np.cos(x), ':b', label='cos(x)')plt.axis('equal')plt.legend();
ảnh ví dụ - data science lại blog của lưu

Như bạn có thể thấy, hàm plt.legend() theo dõi kiểu dòng và màu sắc, và kết hợp chúng với nhãn chính xác.Thêm thông tin về việc chỉ định và định dạng chú thích biểu đồ có thể được tìm thấy trong docstring của plt.legend; bên cạnh đó, chúng tôi sẽ đề cập đến một số tùy chọn chú thích tiên tiến hơn trong Tuỳ chỉnh Chú thích Biểu đồ.

Aside: Những vấn đề cần lưu ý với Matplotlib

Trong khi hầu hết các chức năng của plt được dịch trực tiếp thành các phương thức của ax (như plt.plot()ax.plot(), plt.legend()ax.legend(), v.v.), điều này không áp dụng cho tất cả các lệnh.Đặc biệt, các chức năng để đặt giới hạn, nhãn và tiêu đề đã được điều chỉnh một chút.Để chuyển đổi giữa các chức năng phong cách MATLAB và phương pháp hướng đối tượng, thực hiện các thay đổi sau:

  • plt.xlabel()ax.set_xlabel()
  • plt.ylabel()ax.set_ylabel()
  • plt.xlim()ax.set_xlim()
  • plt.ylim()ax.set_ylim()
  • plt.title()ax.set_title()

Trong giao diện hướng đối tượng đến vẽ đồ thị, thay vì gọi các hàm này một cách riêng lẻ, thường thì việc sử dụng phương thức ax.set() để cùng lúc thiết lập tất cả các thuộc tính này sẽ thuận tiện hơn:

ax = plt.axes()ax.plot(x, np.sin(x))ax.set(xlim=(0, 10), ylim=(-2, 2),       xlabel='x', ylabel='sin(x)',       title='A Simple Plot');
ảnh ví dụ - data science lại blog của lưu