2012-08-11 42 views
9

Tôi biết rằng R được tải một số bảng màu tự động, chẳng hạn như palette, rainbow, heat.colorsgray. Tôi cũng biết về số RColorBrewer. Nhưng, nếu tôi muốn sử dụng bảng màu tùy chỉnh và gán màu theo tên? Điều đó có thể không? bảng màuTạo bảng màu tùy chỉnh trong R

của Công ty của tôi là như sau: viết tắt

#1A73BA (R: 26 G: 115 B: 186) - this is a blue 
#FFDB43 (R:255 G:219 B:67) - this is a yellow 
#B54B05 (R:181 G:75 B:5) - this is an orange 

của Công ty của tôi là AT.

Tôi muốn có thể gọi những màu đó qua tên chứ không phải bằng HEX hoặc RGB vì tôi không nhớ chúng. Lý tưởng nhất, tôi có thể tạo một tập tin mà sẽ tải vào R tự động mà sẽ bắt đầu các màu sắc.

ATBlue <- #1A73BA 
ATYellow <- #FFDB43 
ATOrange <- #B54B05 

Sau đó, tôi có thể gọi các màu sắc:

plot(x,y, col = "ATBlue") 

tôi có thể đưa các giá trị vào một dataframe, sau đó gọi họ như vậy:

ATColors <- data.frame(name = c("ATBlue", "ATYellow", "ATOrange"), color= c("#1A73BA", "#F7D364", "#B54B05")) 

plot(x,y, col = ATColors[3,2]) 

Nhưng tôi sẽ cần phải biết vị trí trong khung dữ liệu để gọi nó chính xác.

Tôi có thể tạo phần tử sẽ tự động tải khi R khởi chạy cho phép tôi gọi tên màu tùy chỉnh vào ô không?

Trả lời

11

câu trả lời này (hoặc ít nhất là một trong những câu trả lời có thể) bình luận và sửa đổi của bạn:

ATblue <- rgb(26/255, 115/255, 186/255, 1) 
ATyellow <- rgb(255/255, 219/255, 67/255, 1) 
ATorange <- rgb(181/255, 75/255, 5/255, 1) 

plot(1:10, col= c(ATblue, ATyellow, ATorange), pch=20) 

Phương pháp sắc nét với rgb phép bạn thiết lập một mức độ alpha, do đó cho phép tính minh bạch trên các thiết bị đồ họa hỗ trợ nó (tối thiểu: 'pdf', 'windows', 'quartz' và 'X11').

Bạn cũng có thể đặt tên cho một 'bảng vector'

palvec <- c(ATblue=ATblue, ATyellow=ATyellow, ATorange=ATorange) 

Đó vector có thể được truy cập với một trong hai số điện thoại hoặc tên:

plot(1,1) # to set up plot window 
abline(h=c(0.8,1,1.2), col= palvec[ c('ATblue', 'ATyellow', 'ATorange') ] , lwd=40) 

Nói chung tôi nghĩ rằng bạn sẽ thấy rằng nếu bạn sử dụng tất cả các trường hợp thấp hơn sẽ có sự tương ứng tốt cho các gói cơ sở và đồ họa (được tải theo mặc định vì vậy không cần đổi tên sẽ là cần thiết) với danh sách gif đó. Vì vậy, nó đã là một phần của R. Hãy nói rằng bạn muốn tìm tên màu R của "LavenderBlush". Các vector của tên màu giao được trả về từ màu sắc() nhưng nó khá lớn, vì vậy bạn có thể giảm thiểu nó xuống với:

grep("lavender", colors(), ignore.case=TRUE, value=TRUE) 
#[1] "lavender"  "lavenderblush" "lavenderblush1" "lavenderblush2" 
#  "lavenderblush3" "lavenderblush4" 

Và nói rằng bạn muốn xem liệu mã Hex cho màu đó là giống như một trên bảng gif không đọc được của bạn:

ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb("lavenderblush"))) 
ccodes 
#[1] "fff0f5" 

Đúng.Và ví dụ bạn chỉ cần sử dụng "nước biển màu xanh":

> ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb("seagreen"))) 
> ccodes 
[1] "2e8b57 

Nếu bạn có một giá trị hex-code bạn có thể thêm "#" để nó với paste0:

paste0("#", ccodes) 
#[1] "#2e8b57" 
plot(1,1, col=paste0("#", ccodes)) 

Nếu bạn có một vector của các ví dụ giá trị, paste0 cũng được vector hóa:

ccodes <- as.hexmode(c(256^(2:0) %*% col2rgb(colors()[20:25]))) 
paste0("#", ccodes) 
#[1] "#ffe4c4" "#eed5b7" "#cdb79e" "#8b7d6b" "#000000" "#ffebcd" 
+0

Tôi cập nhật các câu hỏi để có một chút rõ ràng hơn. Tôi chỉ sử dụng gif đó làm ví dụ. Lý tưởng nhất, tôi sẽ lấy màu của công ty tôi và tạo ra một bảng màu của nó, vì vậy nó sẽ là 10 màu sắc hoặc hơn, không phải 200 hoặc bất cứ điều gì nó được. Tôi đã thử những gì bạn đề nghị, sau đó làm cho cốt truyện một lần nữa. 'plot (x, y, col =" ccodes ")', trả về giá trị này: 'Lỗi trong plot.xy (xy, type, ...): tên màu không hợp lệ 'ccodes''. Điều này làm việc mặc dù: 'cốt truyện (x, y, col =" # 2e8b57 ")'. là không có cách nào để có ccodes làm việc trong ví dụ đó? Cảm ơn – mikebmassey

+0

Như sẽ có cốt truyện (x, y, col = "seagreen"). –

+0

'paste0 (" # ", ccodes) -> ccodes' sau đó bạn có thể sử dụng nó trong cuộc gọi cốt truyện của bạn miễn là bạn thả dấu ngoặc kép:' cốt truyện (x, y, col = ccodes) ' – plannapus

2

tôi sẽ đưa các màu sắc trong một vector được đặt tên như thế này:

ATcols <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 

Sau đó, bạn có thể nhận được, ví dụ: màu xanh dương như sau: ATcols["blue"].

Nếu bạn muốn trở thành một chút fancier, bạn có thể tạo một vector được đặt tên và một chức năng:

AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 
ATcolor <- function(color="blue") { 
     if (is.numeric(color)) AT_color_data[color] 
     else AT_color_data[tolower(color)] 
} 

này cung cấp cho bạn một vài lựa chọn để có được màu sắc của bạn:

ATcolor(2:3) 
# yellow orange 
# "#FFDB43" "#B54B05" 

ATcolor("orange") 
# orange 
# "#B54B05" 

ATcolor(c("orange", "blue")) 
# orange  blue 
# "#B54B05" "#1A73BA" 

Ngoài ra, bạn có thể làm cho chức năng của bạn hoạt động nhiều hơn một chút như rainbow khi cung cấp đối số dạng số:

AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 
ATcolor <- function(color="blue") { 
     if (is.numeric(color)) AT_color_data[1:color[1]] 
     else AT_color_data[tolower(color)] 
} 

sau đó, ví dụ:

ATcolor(2) 
#  blue yellow 
# "#1A73BA" "#FFDB43" 
+1

bạn không thể chỉ sử dụng một vector có tên? sau đó bạn có thể bỏ qua một vài câu lệnh 'unlist' và chỉ sử dụng' ATcolor <- function (x) AT_color_data [x] '(tôi nghĩ) –

+0

Điểm tốt. Tôi sẽ chỉnh sửa. – seancarmody

0
library("grDevices") 
plot(1:20,pch=20,col=col) 
col=colorRampPalette(c("white", "red"))(20) 
M <- matrix(runif(100),10,10) 
M[lower.tri(M)] <- NA 
image(M,col = col,frame=F,xaxt="n",yaxt="n") 
Các vấn đề liên quan