Chọn phần từ để hiển thị trái lệ¶
Như chúng ta đã thấy, mặc định legend bao gồm tất cả các phần tử đã được đặt tên.Nếu điều này không phải là điều mong muốn, chúng ta có thể điều chỉnh chi tiết về những phần tử và nhãn hiện thị trong legend bằng cách sử dụng các đối tượng được trả về bởi các lệnh vẽ biểu đồ.Lệnh plt.plot()
có thể tạo nhiều đường thẳng cùng một lúc, và trả về một danh sách các đối tượng đường thẳng đã được tạo ra.Chuyển bất kỳ trong số này vào plt.legend()
sẽ cho biết định danh cụ thể, cùng với các nhãn chúng ta muốn chỉ định:
y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5))lines = plt.plot(x, y)# lines is a list of plt.Line2D instancesplt.legend(lines[:2], ['first', 'second']);
Thực tế, trong thực hành, tôi thường thấy rằng việc sử dụng phương pháp đầu tiên là rõ ràng hơn, áp dụng nhãn cho các yếu tố đồ thị mà bạn muốn hiển thị trên hình chú giải:
plt.plot(x, y[:, 0], label='first')plt.plot(x, y[:, 1], label='second')plt.plot(x, y[:, 2:])plt.legend(framealpha=1, frameon=True);
Lưu ý rằng theo mặc định, legend
bỏ qua tất cả các phần tử mà không có thuộc tính label
được thiết lập.
Chú giải cho Kích thước Điểm¶
Đôi khi, giá trị mặc định của hình thức không đáp ứng đủ cho việc trình bày dữ liệu.Ví dụ, có thể bạn đang sử dụng kích thước điểm để đánh dấu một số tính năng của dữ liệu và muốn tạo ra một hình thức phản ánh điều này.Dưới đây là một ví dụ, trong đó chúng ta sẽ sử dụng kích thước của điểm để chỉ ra dân số của các thành phố California.Chúng tôi muốn một hình thức xác định tỷ lệ kích thước của các điểm, và chúng tôi sẽ thực hiện điều này bằng cách vẽ một số dữ liệu được đánh dấu mà không có thông tin:
import pandas as pdcities = pd.read_csv('data/california_cities.csv')# Extract the data we're interested inlat, lon = cities['latd'], cities['longd']population, area = cities['population_total'], cities['area_total_km2']# Scatter the points, using size and color but no labelplt.scatter(lon, lat, label=None, c=np.log10(population), cmap='viridis', s=area, linewidth=0, alpha=0.5)plt.axis(aspect='equal')plt.xlabel('longitude')plt.ylabel('latitude')plt.colorbar(label='log$_{10}$(population)')plt.clim(3, 7)# Here we create a legend:# we'll plot empty lists with the desired size and labelfor area in [100, 300, 500]: plt.scatter([], [], c='k', alpha=0.3, s=area, label=str(area) + ' km$^2$')plt.legend(scatterpoints=1, frameon=False, labelspacing=1, title='City Area')plt.title('California Cities: Area and Population');
Đánh dấu luôn luôn liên kết với một đối tượng nào đó trên đồ thị, do đó nếu chúng ta muốn hiển thị một hình dạng cụ thể chúng ta cần phải vẽ nó.Trong trường hợp này, các đối tượng chúng ta muốn (hình tròn màu xám) không nằm trên đồ thị, vì vậy chúng ta cao mạo bằng cách vẽ các danh sách trống.Lưu ý rằng chú thích chỉ liệt kê các thành phần đồ thị có nhãn cụ thể được chỉ định.
Bằng cách vẽ các danh sách trống, chúng ta tạo ra các đối tượng biểu đồ có nhãn được chọn bởi huy hiệu, và bây giờ huy hiệu của chúng tôi cung cấp cho chúng ta một số thông tin hữu ích.Chiến lược này có thể hữu ích để tạo ra các biểu đồ phức tạp hơn.
Cuối cùng, lưu ý rằng đối với dữ liệu địa lý như này, sẽ rõ ràng hơn nếu chúng ta có thể hiển thị ranh giới tỉnh thành hoặc các yếu tố khác đặc specific map.Đối với việc này, một lựa chọn tuyệt vời là bộ công cụ thêm Basemap của Matplotlib, mà chúng ta sẽ khám phá trong Dữ liệu địa lý với Basemap.
Nhiều Huyền thoại¶
Đôi khi khi thiết kế một bản đồ, bạn muốn thêm nhiều huy hiệu vào cùng một trục.
fig, ax = plt.subplots()lines = []styles = ['-', '--', '-.', ':']x = np.linspace(0, 10, 1000)for i in range(4): lines += ax.plot(x, np.sin(x - i * np.pi / 2), styles[i], color='black')ax.axis('equal')# specify the lines and labels of the first legendax.legend(lines[:2], ['line A', 'line B'], loc='upper right', frameon=False)# Create the second legend and add the artist manually.from matplotlib.legend import Legendleg = Legend(ax, lines[2:], ['line C', 'line D'], loc='lower right', frameon=False)ax.add_artist(leg);
Đây là một cái nhìn thoáng qua về các đối tượng nghệ sĩ cấp thấp tạo nên bất kỳ đồ thị Matplotlib nào.Nếu bạn xem xét mã nguồn của ax.legend()
(ghi nhớ rằng bạn có thể làm điều này trong sổ ghi IPython sử dụng ax.legend??
) bạn sẽ thấy rằng hàm chỉ đơn giản là bao gồm một số logic để tạo ra một đối tượng Legend
phù hợp, sau đó được lưu trong thuộc tính legend_
và được thêm vào hình khi đồ thị được vẽ.