2013-07-18 26 views
7

tôi vẽ một đồ thị 2 geom_point với đoạn mã sau:Hai geom_points thêm một huyền thoại

source("http://www.openintro.org/stat/data/arbuthnot.R") 
library(ggplot2) 
ggplot() + 
    geom_point(aes(x = year,y = boys),data=arbuthnot,colour = '#3399ff') + 
    geom_point(aes(x = year,y = girls),data=arbuthnot,shape = 17,colour = '#ff00ff') + 
    xlab(label = 'Year') + 
    ylab(label = 'Rate') 

tôi chỉ đơn giản muốn biết làm thế nào để thêm một huyền thoại ở bên phải. Với cùng một hình dạng và màu sắc. Tam giác hồng nên có truyền thuyết "người phụ nữ" và vòng tròn màu xanh huyền thoại "đàn ông". Có vẻ khá đơn giản nhưng sau nhiều lần thử tôi không thể làm được. (Tôi là người mới bắt đầu với ggplot).

enter image description here

Trả lời

11

Nếu bạn đổi tên các cột của bạn của khung dữ liệu ban đầu và sau đó làm tan chảy nó sang định dạng dài với reshape2::melt, nó dễ dàng hơn để xử lý trong ggplot2. Bằng cách xác định các tính năng thẩm mỹ colorshape trong lệnh ggplot và chỉ định quy mô cho màu sắc và hình dạng theo cách thủ công, chú thích sẽ xuất hiện.

source("http://www.openintro.org/stat/data/arbuthnot.R") 
library(ggplot2) 
library(reshape2) 

names(arbuthnot) <- c("Year", "Men", "Women") 

arbuthnot.melt <- melt(arbuthnot, id.vars = 'Year', variable.name = 'Sex', 
    value.name = 'Rate') 

ggplot(arbuthnot.melt, aes(x = Year, y = Rate, shape = Sex, color = Sex))+ 
geom_point() + scale_color_manual(values = c("Women" = '#ff00ff','Men' = '#3399ff')) + 
scale_shape_manual(values = c('Women' = 17, 'Men' = 16)) 

enter image description here

+0

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

3

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

+0

Mã này sẽ nhận được lộn xộn khá nhanh chóng nếu chúng ta có, ví dụ, 5-6 + loại trái cây, thay vì "chàng trai" và "cô gái". – zx8754