Một ví dụ định tính
Cuối cùng, hãy xem một ví dụ về biến phân loại. Raster land_cover chứa một lưới phân loại bề mặt Trái Đất. Hãy xem land_cover bằng cách in nó:
land_cover
Bạn sẽ thấy values là số, nhưng có attributes ánh xạ các số này tới các hạng mục (giống cách factor hoạt động).
Việc chọn màu cho biến phân loại phụ thuộc nhiều vào mục đích của biểu đồ. Khi bạn muốn các hạng mục có mức độ nổi bật thị giác xấp xỉ nhau — tức là bạn không muốn một hạng mục nổi bật hơn hẳn — một cách là dùng các màu khác nhau về sắc độ (hue), nhưng có cùng độ bão hòa (chroma — mức độ rực rỡ) và độ sáng (lightness) (đây là mặc định cho thang màu rời rạc trong ggplot2 và có thể tạo bằng hàm hcl()).
Các bảng màu định tính của RColorBrewer cân bằng giữa việc có các màu có sức nặng thị giác tương đương và dễ phân biệt màu. Hai sơ đồ "paired" và "accent" khác đi một chút: "paired" cung cấp các cặp màu có độ sáng khác nhau, còn "accent" có một số màu đậm hơn để bạn có thể làm nổi bật một số hạng mục nhất định.
Với dữ liệu này, sẽ hợp lý hơn nếu chọn các màu trực quan, như xanh lá cho rừng và xanh dương cho nước. Dù bạn chọn cách nào, thiết lập màu mới chỉ đơn giản là truyền một vector màu qua đối số palette trong lớp tm_*** tương ứng.
Bài tập này là một phần của khóa học
Trực quan hóa dữ liệu địa lý trong R
Hướng dẫn bài tập
- Vẽ raster
land_coverbằng cách kết hợptm_shape()vàtm_raster(). Mặc địnhtmapdùng bảng màu định tính"Set3"củaRColorBrewer. - Xem mã của
hcl_cols, mô phỏng bảng màu dùng bởiggplot2. Sau đó vẽ lại rasterland_cover, truyềnhcl_colsvào đối sốpalettecủatm_raster(). - Gọi
levels()trênland_coverđể xem các hạng mục. - Lần này, dùng
intuitive_colslàm bảng màu và thêm một lớptm_legend()với đối sốposition = c("left", "bottom").
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
library(raster)
# Plot land_cover
# Palette like the ggplot2 default
hcl_cols <- hcl(h = seq(15, 375, length = 9),
c = 100, l = 65)[-9]
# Use hcl_cols as the palette
# Examine levels of land_cover
# A set of intuitive colors
intuitive_cols <- c(
"darkgreen",
"darkolivegreen4",
"goldenrod2",
"seagreen",
"wheat",
"slategrey",
"white",
"lightskyblue1"
)
# Use intuitive_cols as palette