Dưới đây là một cách để làm điều này mà không sử dụng reshape :: tan chảy. reshape :: melt works, nhưng bạn có thể nhận được một ràng buộc nếu bạn muốn thêm những thứ khác vào đồ thị, chẳng hạn như các đoạn đường. Mã bên dưới sử dụng tổ chức dữ liệu ban đầu. Chìa khóa để sửa đổi chú giải là đảm bảo các đối số cho scale_color_manual (...) và scale_shape_manual (...) giống hệt nhau nếu không bạn sẽ nhận được hai truyền thuyết.
source("http://www.openintro.org/stat/data/arbuthnot.R")
library(ggplot2)
library(reshape2)
ptheme <- theme (
axis.text = element_text(size = 9), # tick labels
axis.title = element_text(size = 9), # axis labels
axis.ticks = element_line(colour = "grey70", size = 0.25),
panel.background = element_rect(fill = "white", colour = NA),
panel.border = element_rect(fill = NA, colour = "grey70", size = 0.25),
panel.grid.major = element_line(colour = "grey85", size = 0.25),
panel.grid.minor = element_line(colour = "grey93", size = 0.125),
panel.margin = unit(0 , "lines"),
legend.justification = c(1, 0),
legend.position = c(1, 0.1),
legend.text = element_text(size = 8),
plot.margin = unit(c(0.1, 0.1, 0.1, 0.01), "npc") # c(bottom, left, top, right), values can be negative
)
cols <- c("c1" = "#ff00ff", "c2" = "#3399ff")
shapes <- c("s1" = 16, "s2" = 17)
p1 <- ggplot(data = arbuthnot, aes(x = year))
p1 <- p1 + geom_point(aes(y = boys, color = "c1", shape = "s1"))
p1 <- p1 + geom_point(aes(y = girls, color = "c2", shape = "s2"))
p1 <- p1 + labs(x = "Year", y = "Rate")
p1 <- p1 + scale_color_manual(name = "Sex",
breaks = c("c1", "c2"),
values = cols,
labels = c("boys", "girls"))
p1 <- p1 + scale_shape_manual(name = "Sex",
breaks = c("s1", "s2"),
values = shapes,
labels = c("boys", "girls"))
p1 <- p1 + ptheme
print(p1)
output results
nhờ là chính xác những gì tôi đang tìm kiếm. Cấu trúc có vẻ khó hơn một chút so với chỉ sử dụng ggplot2. Tôi sẽ có một cái nhìn tại tài liệu reshape2 ... Cảm ơn bạn – S12000