2012-05-29 27 views
31

Có thể là giải pháp rất dễ dàng đối với vấn đề của tôi nhưng tôi không thể tìm thấy câu trả lời thỏa mãn trực tuyến.Thêm màu vào ô mẫu - "Giá trị liên tục được cung cấp cho quy mô rời rạc" lỗi

Sử dụng lệnh sau đây tôi đã có thể tạo ra các đồ thị boxplot sau và che phủ nó với các điểm dữ liệu cá nhân:

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    geom_point(aes(color = Age)) 

Có rất nhiều điều tôi muốn thêm/thay đổi:

1. Thay đổi màu đường và/hoặc tô màu của mỗi ô mẫu (tùy thuộc vào "Độ tuổi") bằng cách sử dụng 6 màu khác nhau từ trái sang phải:

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00") 

Tôi đã thử

ggplot(data = MYdata, aes(Age, Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

nhưng kết quả là lỗi "Continuous value supplied to discrete scale".

2. Thay đổi màu sắc của mỗi điểm dữ liệu (tùy thuộc vào "Age") sử dụng 6 màu sắc khác nhau từ trái sang phải:

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00") 

tôi đã cố gắng:

ggplot(data = MYdata, aes(Age, Richness)) + 
    geom_boxplot(aes(group=Age)) + 
    geom_point(aes(color = Age)) + 
    scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

nhưng nó cũng dẫn đến lỗi:

Continuous value supplied to discrete scale

3. Thay đổi văn bản trong chú giải thành "0 tháng", "1 tháng", "3 tháng", "6 tháng", "9 tháng", "12 tháng"

Trả lời

48

Trước tiên, cung cấp dữ liệu mẫu sẽ Cứu giúp. Vì bạn không, đây là một số:

MYdata <- data.frame(Age = rep(c(0,1,3,6,9,12), each=20), 
        Richness = rnorm(120, 10000, 2500)) 

Phần 1 và 2 gốc từ cùng một vấn đề. Age là một biến liên tục, nhưng bạn đang cố gắng sử dụng nó trong một quy mô rời rạc (bằng cách xác định màu sắc cho các giá trị cụ thể của tuổi). Nói chung, một tỷ lệ ánh xạ biến thành hình ảnh; cho một độ tuổi liên tục, có một màu tương ứng cho mọi giá trị có thể có về tuổi tác, không chỉ là những giá trị xuất hiện trong dữ liệu của bạn. Tuy nhiên, bạn có thể đồng thời coi tuổi như là một biến phân loại (yếu tố) đối với một số tính thẩm mỹ. Đối với phần thứ ba của câu hỏi của bạn, trong mô tả tỷ lệ, bạn có thể xác định các nhãn cụ thể tương ứng với các khoảng ngắt cụ thể trong thang đo. Đưa tất cả điều này với nhau (và thêm một cái gì đó để cung cấp cho bạn các trục x nhãn giống như những gì bạn có trong ví dụ):

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(fill=factor(Age))) + 
    geom_point(aes(color = factor(Age))) + 
    scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) + 
    scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) + 
    scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

enter image description here

Với màu sắc này, những điểm rơi bên trong boxplot là không nhìn thấy được (vì chúng có cùng màu với ô tô của ô). Có lẽ để lại các ô trống rỗng và vẽ đường nét của nó trong màu sắc sẽ tốt hơn.

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
    geom_boxplot(aes(colour=factor(Age)), fill=NA) + 
    geom_point(aes(color = factor(Age))) + 
    scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) + 
    scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"), 
         labels = c("0 month", "1 month", "3 months", 
           "6 months", "9 months", "12 months"), 
         values = c("#E69F00", "#56B4E9", "#009E73", 
           "#F0E442", "#0072B2", "#D55E00")) 

enter image description here

Cuối cùng, hãy xem xét nếu bạn thực sự cần phải màu sắc mỗi độ tuổi khác nhau, vì họ cũng được xác định bởi các trục x rồi.

+1

Cảm ơn bạn rất nhiều, Brian! Không thực sự biết (chưa) làm thế nào để tạo ra một tập dữ liệu ngẫu nhiên trong R. Cảm ơn bạn đã thực hiện điều này trên anyway! Tôi có một câu hỏi tiếp theo dựa trên đề xuất của bạn để giữ cho các ô trống. Làm cách nào để thay đổi màu LINE của mỗi hộp (ví dụ: thành màu xám)? Tôi đã thay đổi màu tô bằng geom_boxplot (aes (color = factor (Age)), fill = "gray80"). Sau đó thử scale_colour_manual (break = c ("0", "1", "3", "6", "9", "12"), giá trị = c ("gray80", "gray80", "gray80", " gray80 "," gray80 "," gray80 ")) nhưng sau đó các điểm dữ liệu cũng trở thành màu xám. Tất nhiên tôi muốn giữ các điểm màu. – Dalmuti71

+1

'geom_boxplot (aes (vị trí = yếu tố (Tuổi)), color =" gray ", fill = NA)' hoặc 'geom_boxplot (aes (nhóm = yếu tố (Tuổi)), color =" gray ", fill = NA)' –

+0

Cảm ơn, Sandy! Chỉ cần cho sự hiểu biết của riêng tôi: "position = factor (Age)" hoặc "group = factor (Age)" làm gì để tôi có thể xác định màu đường? – Dalmuti71

Các vấn đề liên quan