2012-04-04 28 views
9

Tôi đang tạo biểu đồ và tôi muốn tô màu các nhóm nhất định với các màu cụ thể. Dưới đây là biểu đồ của tôi:Cách điền màu theo cách thủ công vào biểu đồ ggplot2

enter image description here

Tôi có 14 nhóm và tôi muốn màu 7 màu đỏ đầu tiên, 4 màu xanh bên cạnh, và trận chung kết 3 màu da cam. Làm thế nào tôi có thể làm điều này trong ggplot? Cảm ơn.

+0

tôi giả sử bạn có nghĩa là một âm mưu thanh, không phải là một biểu đồ? Có một sự khác biệt lớn. – joran

+0

Dữ liệu là một âm mưu tần số từ dữ liệu không liên tục. Tôi vẽ nó bằng cách sử dụng 'geom_histogram'. Tôi không chắc chắn nếu điều này tạo thành một "biểu đồ thanh" hoặc "biểu đồ rời rạc". – drbunsen

+2

Ok. Tôi có lẽ chỉ cần sử dụng geom_bar trong trường hợp đó. Và sau đó bạn chỉ cần một biến nhóm trong khung dữ liệu của bạn xác định nhóm màu bạn muốn, và sau đó ánh xạ đó để 'điền'. Có một số ví dụ trong '? Geom_bar'. – joran

Trả lời

12

CẬP NHẬT PHIÊN BẢN

Không cần phải chỉ định cột nhóm, ggplot lệnh là nhiều hơn nữa compact.

library(ggplot2) 
set.seed(1234) 

# Data generating block 
df <- data.frame(x=sample(1:14, 1000, replace=T)) 
# Colors 
colors <- c(rep("red",7), rep("blue",4), rep("orange",3)) 

ggplot(df, aes(x=x)) + 
    geom_histogram(fill=colors) + 
    scale_x_discrete(limits=1:14) 

enter image description here

OLD VERSION

library(ggplot2) 

# 
# Data generating block 
# 
df <- data.frame(x=sample(c(1:14), 1000, replace=TRUE)) 
df$group <- ifelse(df$x<=7, 1, ifelse(df$x<=11, 2, 3)) 

# 
# Plotting 
# 
ggplot(df, aes(x=x)) + 
    geom_histogram(data=subset(df,group==1), fill="red") + 
    geom_histogram(data=subset(df,group==2), fill="blue") + 
    geom_histogram(data=subset(df,group==3), fill="orange") + 
    scale_x_discrete(breaks=df$x, labels=df$x) 

enter image description here

+0

Tôi tìm thấy cách tiếp cận '' geom_histogram (fill = colors) '' là cách duy nhất để xử lý một biểu đồ tích lũy '' aes (y = cumsum (.. count ../ sum (.. count ..))) ' ', bởi vì thiết lập một điền bên trong' 'aes'' dẫn đến các nhóm được xếp chồng lên nhau. Cách tiếp cận '' stat_ecdf'' đơn giản hơn không hiệu quả với tôi vì nó không có tùy chọn '' breaks''. Cuối cùng, cách tiếp cận này chỉ có tác dụng. – PatrickT

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