2013-03-07 32 views
70

Tôi đang vẽ một tập dữ liệu phân loại và muốn sử dụng các màu đặc biệt để thể hiện các danh mục khác nhau. Với số n, làm thế nào tôi có thể nhận được n số màu sắc đặc biệt MOST trong R? Cảm ơn.Làm thế nào để tạo ra một số màu sắc đặc biệt nhất trong R?

+0

liên quan: http://stackoverflow.com/questions/6075140/in-r-how-do-i-change-the-color-value-of-just-one-value-in-ggplot2s-scale-fill-b/6076605#6076605 –

+0

Liên quan : http://stackoverflow.co m/câu hỏi/9563711/r-bảng màu-cho-nhiều-dữ liệu-lớp/41230685 –

Trả lời

12

Bạn có thể sử dụng colorRampPalette từ cơ sở hoặc RColorBrewer gói:

Với colorRampPalette, bạn có thể chỉ định màu sắc như sau:

colorRampPalette(c("red", "green"))(5) 
# [1] "#FF0000" "#BF3F00" "#7F7F00" "#3FBF00" "#00FF00" 

Hoặc bạn có thể cung cấp mã hex cũng như:

colorRampPalette(c("#3794bf", "#FFFFFF", "#df8640"))(5) 
# [1] "#3794BF" "#9BC9DF" "#FFFFFF" "#EFC29F" "#DF8640" 
# Note that the mid color is the mid value... 

Với RColorBrewer bạn có thể sử dụng màu từ các bảng màu đã có sẵn:

require(RColorBrewer) 
brewer.pal(9, "Set1") 
# [1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF" 
# [9] "#999999" 

Xem gói RColorBrewer cho các bảng màu khác có sẵn. Hi vọng điêu nay co ich.

+0

Cảm ơn. Tôi thích tùy chọn cuối cùng 'brewer.pal'. nhưng nó được giới hạn tối đa 9 màu. Tôi thực sự có hơn 9 danh mục. Các lựa chọn thay thế đầu tiên tạo ra một màu gradient, mà không phải là đặc biệt như tôi muốn. – RNA

+2

bạn sẽ không thể chọn nhiều màu "khác biệt". Bạn có thể nhận được tối đa là 12 Tôi giả sử. Bạn nên kiểm tra http://colorbrewer2.org/ và lấy các màu (có 1 bảng màu 12 nếu tôi đúng). – Arun

+0

Tìm kiếm hơn 12 colost đặc biệt sẽ khó khăn - tôi nghĩ có một cuộc thảo luận về trang đó trên trang colorbrewer – alexwhan

48

Dưới đây là một vài lựa chọn:

  1. Có một cái nhìn tại palette chức năng:

    palette(rainbow(6))  # six color rainbow 
    (palette(gray(seq(0,.9,len = 25)))) #grey scale 
    
  2. colorRampPalette chức năng:

    ##Move from blue to red in four colours 
    colorRampPalette(c("blue", "red"))(4) 
    
  3. Nhìn vào colorBrewer gói (và website). Nếu bạn muốn phân tách màu sắc, sau đó chọn phân tách trên trang web. Ví dụ:

    library(colorBrewer) 
    brewer.pal(7, "BrBG") 
    
  4. Trang web I want hue cung cấp nhiều bảng màu đẹp mắt. Một lần nữa, chỉ cần chọn bảng màu mà bạn cần. Ví dụ, bạn có thể lấy màu rgb từ trang web và làm cho bảng màu của riêng bạn:

    palette(c(rgb(170,93,152, maxColorValue=255), 
        rgb(103,143,57, maxColorValue=255), 
        rgb(196,95,46, maxColorValue=255), 
        rgb(79,134,165, maxColorValue=255), 
        rgb(205,71,103, maxColorValue=255), 
        rgb(203,77,202, maxColorValue=255), 
        rgb(115,113,206, maxColorValue=255))) 
    
+0

cảm ơn câu trả lời của bạn. Nó tạo ra màu sắc, nhưng một số không đặc biệt với nhau. có lẽ tôi nên nhấn mạnh thêm về điều đó trong các câu hỏi của mình. – RNA

+1

@RNAer Tôi đã cập nhật câu trả lời của mình. Bạn có thể sử dụng đề xuất 3 và 4 để nhận được ** phân tách ** bảng màu. – csgillespie

+0

'Tôi muốn hue' là một trang web tuyệt vời. Đây chính là điều tôi muốn. Cho một số, làm thế nào để tạo ra một bảng màu của số lượng màu sắc. nhưng chúng ta có thể tự động làm điều đó trong R? – RNA

51

Tôi tham gia tất cả các bảng tính từ RColorBrewer gói. Các bảng màu định tính được cho là cung cấp X màu sắc đặc biệt nhất. Tất nhiên, trộn chúng vào một bảng cũng có màu tương tự, nhưng đó là màu tốt nhất tôi có thể nhận được (74 màu).

library(RColorBrewer) 
n <- 60 
qual_col_pals = brewer.pal.info[brewer.pal.info$category == 'qual',] 
col_vector = unlist(mapply(brewer.pal, qual_col_pals$maxcolors, rownames(qual_col_pals))) 
pie(rep(1,n), col=sample(col_vector, n)) 

colour_Brewer_qual_60

giải pháp khác là: lấy tất cả các màu R từ các thiết bị đồ họa và mẫu từ họ. Tôi đã loại bỏ các tông màu xám vì chúng quá giống nhau.Điều này cho phép 433 màu

color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)] 

set of 20 colours

pie(rep(1,n), col=sample(color, n)) 

với 200 màu sắc n = 200:

pie(rep(1,n), col=sample(color, n)) 

set of 200 colours

+0

Có khả năng chuyển đổi các mã hex trong 'col' thành màu tương ứng tên? – Prradep

+0

@Prradep có nghĩa là gì? 'color' từ thiết bị đồ họa có tên. Nếu bạn nói chung, không phải tất cả mã hex có tên màu tương ứng (chỉ có 433 màu trong 'grDevices' nhưng nhiều mã hex hơn) –

+0

Tôi đang đề cập đến' col = sample (col_vector, n) 'từ' RColorBrewer' trong đoạn mã của bạn. Ví dụ: Cách tìm tên màu cho '# B3E2CD, # E78AC3, # B3DE69' có sẵn từ' mẫu (col_vector, 3) '. Cách khác, Cách tìm tất cả các mã hex được cung cấp bởi hàm 'brewer.pal' với tên màu của chúng. – Prradep

11

Bạn cũng có thể thử các randomcoloR package:

library(randomcoloR) 
n <- 20 
palette <- distinctColorPalette(n) 

Bạn có thể thấy rằng một tập hợp các màu sắc khác biệt cao được lựa chọn khi hình dung trong một biểu đồ pie (theo đề nghị của câu trả lời khác ở đây):

pie(rep(1, n), col=palette) 

enter image description here

Thể hiện trong một biểu đồ pie với 50 màu sắc:

n <- 50 
palette <- distinctColorPalette(n) 
pie(rep(1, n), col=palette) 

enter image description here

+1

Cảm ơn. Tôi đã phải sử dụng 'unname (distinctColorPalette (n))' để thực hiện công việc này với ggplot. Tôi đoán ggplot cần một vector không tên. 'col_vector <- unname (distinctColorPalette (n))' và sau đó '... + scale_color_manual (giá trị = col_vector) ...' – Gaurav

5

Tôi khuyên bạn nên sử dụng nguồn bên ngoài cho các bảng màu lớn.

http://tools.medialab.sciences-po.fr/iwanthue/

có một dịch vụ để soạn bất kỳ kích thước của bảng theo thông số khác nhau và

https://graphicdesign.stackexchange.com/questions/3682/where-can-i-find-a-large-palette-set-of-contrasting-colors-for-coloring-many-d/3815

thảo luận về những vấn đề chung chung từ góc độ các nhà thiết kế đồ họa và đưa ra rất nhiều ví dụ về bảng sử dụng được.

Để bao gồm một bảng màu từ RGB giá trị bạn chỉ cần sao chép các giá trị trong một vector như trong ví dụ:

colors37 = c("#466791","#60bf37","#953ada","#4fbe6c","#ce49d3","#a7b43d","#5a51dc","#d49f36","#552095","#507f2d","#db37aa","#84b67c","#a06fda","#df462a","#5b83db","#c76c2d","#4f49a3","#82702d","#dd6bbb","#334c22","#d83979","#55baad","#dc4555","#62aad3","#8c3025","#417d61","#862977","#bba672","#403367","#da8a6d","#a79cd4","#71482c","#c689d0","#6b2940","#d593a7","#895c8b","#bd5975") 
8

Ngoài ra còn có một cách khá "mới" có được một bảng màu đặc biệt tối ưu, cũng liên quan đến mù màu và chuyển đổi đen trắng có thể với Viridis color palettes.

Để có được bảng, chỉ cần cài đặt các gói và sử dụng các chức năng viridis_pal()

install.packages("viridis") 
library(viridis) 
viridis_pal(option = "D")(n) # n = number of colors seeked 

Với tùy chọn "A", "B", "C" và "D" để chọn giữa các bảng:

enter image description here

Để biết thêm ví dụ, hãy truy cập vào họa tiết của gói.Một số ví dụ đẹp trong đó:

enter image description here

enter image description here

Ngoài ra còn có một buổi nói chuyện tuyệt vời giải thích sự phức tạp của bảng tốt nhất trên YouTube:

A Better Default Colormap for Matplotlib | SciPy 2015 | Nathaniel Smith and Stéfan van der Walt

+3

Điều này không phù hợp với màu sắc đặc biệt. –

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