Tôi đang thực hiện một số phân tích trong ggplot2 tại thời điểm này cho một dự án và tình cờ tôi gặp một số (đối với tôi) hành vi mà tôi không thể giải thích. Khi tôi viết aes(x = cyl, ...)
cốt truyện trông khác với nội dung của nó nếu tôi chuyển cùng một biến bằng cách sử dụng aes(x = mtcars$cyl, ...)
. Khi tôi xóa facet_grid(am ~ .)
cả hai biểu đồ đều giống nhau. Đoạn code dưới đây được mô hình hóa sau khi mã trong dự án của tôi mà tạo ra những hành vi tương tự:Vấn đề khi chuyển biến với ký hiệu ký hiệu đô la sang aes() kết hợp với facet_grid() hoặc facet_wrap()
library(dplyr)
library(ggplot2)
data = mtcars
test.data = data %>%
select(-hp)
ggplot(test.data, aes(x = test.data$cyl, y = mpg)) +
geom_point() +
facet_grid(am ~ .) +
labs(title="graph 1 - dollar sign notation")
ggplot(test.data, aes(x = cyl, y = mpg)) +
geom_point()+
facet_grid(am ~ .) +
labs(title="graph 2 - no dollar sign notation")
Dưới đây là hình ảnh của biểu đồ 1:
Dưới đây là hình ảnh của đồ thị 2:
Tôi thấy rằng tôi có thể giải quyết vấn đề này bằng cách sử dụng aes_string
thay vì aes
và chuyển các tên biến thành chuỗi, nhưng tôi muốn hiểu tại sao ggplot hoạt động theo cách đó. Vấn đề cũng xảy ra trong các nỗ lực tương tự với facet_wrap
.
Thx rất nhiều để được trợ giúp trước! Tôi cảm thấy rất khó chịu nếu tôi không hiểu rằng đúng ...
câu trả lời ngắn gọn là: * không bao giờ * sử dụng '$' trong 'aes()' – baptiste
^_^sau cú sốc tôi nhận được hôm nay khi đồ thị của tôi đột nhiên trông kỳ lạ, tôi sẽ không làm lại. Tôi vẫn muốn hiểu những gì đang xảy ra, bởi vì tôi chưa bao giờ gặp phải vấn đề/hành vi này trước đây. – Christoph
khi ggplot xây dựng cốt truyện, nếu chia nhỏ tập dữ liệu (s) cho mỗi lớp thành các nhóm, được xác định bởi tính thẩm mỹ và mặt.Đối với nhóm này là đáng tin cậy, bạn cần các biến để bắt nguồn từ một data.frame duy nhất, nếu không ggplot có thể kết thúc bằng cách sử dụng một thứ tự khác cho yếu tố facetting và phần còn lại của ánh xạ. – baptiste