Mặc dù chỉ có một vài dòng được yêu cầu để vẽ biểu đồ nhiều / chồng chéo trong ggplot2, nhưng kết quả không phải lúc nào cũng thỏa đáng. Cần phải sử dụng đúng các đường viền và tô màu để đảm bảo mắt có thể phân biệt giữa các biểu đồ .
Các chức năng sau đây cân bằng màu sắc đường viền, độ mờ và các ô mật độ chồng lên nhau để cho phép người xem phân biệt giữa các bản phân phối .
Biểu đồ đơn :
plot_histogram <- function(df, feature) {
plt <- ggplot(df, aes(x=eval(parse(text=feature)))) +
geom_histogram(aes(y = ..density..), alpha=0.7, fill="#33AADE", color="black") +
geom_density(alpha=0.3, fill="red") +
geom_vline(aes(xintercept=mean(eval(parse(text=feature)))), color="black", linetype="dashed", size=1) +
labs(x=feature, y = "Density")
print(plt)
}
Nhiều biểu đồ :
plot_multi_histogram <- function(df, feature, label_column) {
plt <- ggplot(df, aes(x=eval(parse(text=feature)), fill=eval(parse(text=label_column)))) +
geom_histogram(alpha=0.7, position="identity", aes(y = ..density..), color="black") +
geom_density(alpha=0.7) +
geom_vline(aes(xintercept=mean(eval(parse(text=feature)))), color="black", linetype="dashed", size=1) +
labs(x=feature, y = "Density")
plt + guides(fill=guide_legend(title=label_column))
}
Cách sử dụng :
Chỉ cần chuyển khung dữ liệu của bạn vào các hàm trên cùng với các đối số mong muốn:
plot_histogram(iris, 'Sepal.Width')
plot_multi_histogram(iris, 'Sepal.Width', 'Species')
Các tham số phụ trong plot_multi_histogram là tên của cột chứa nhãn danh mục.
Chúng ta có thể thấy điều này rõ rệt hơn bằng cách tạo một khung dữ liệu với nhiều phương tiện phân phối khác nhau :
a <-data.frame(n=rnorm(1000, mean = 1), category=rep('A', 1000))
b <-data.frame(n=rnorm(1000, mean = 2), category=rep('B', 1000))
c <-data.frame(n=rnorm(1000, mean = 3), category=rep('C', 1000))
d <-data.frame(n=rnorm(1000, mean = 4), category=rep('D', 1000))
e <-data.frame(n=rnorm(1000, mean = 5), category=rep('E', 1000))
f <-data.frame(n=rnorm(1000, mean = 6), category=rep('F', 1000))
many_distros <- do.call('rbind', list(a,b,c,d,e,f))
Truyền khung dữ liệu như trước (và mở rộng biểu đồ bằng các tùy chọn):
options(repr.plot.width = 20, repr.plot.height = 8)
plot_multi_histogram(many_distros, 'n', 'category')