Mô phỏng bảng màu mặc định của ggplot2


191

Tôi có thể sử dụng chức năng nào để mô phỏng bảng màu mặc định của ggplot2 cho số lượng màu mong muốn. Ví dụ: đầu vào 3 sẽ tạo ra một vectơ ký tự có màu HEX với các màu sau: nhập mô tả hình ảnh ở đây


10
Nhìn vào gói cân
hadley

2
Vâng! Tôi giữ một bản in display.brewer.all()tại bàn của tôi. Tôi nghĩ rằng tôi thích Set1 là tốt nhất cho các yếu tố.
John Colby

ý tưởng tốt! Tôi sẽ thực hiện cùng một bản in. Đồng ý với Set1, tôi đã thấy mình sử dụng nó trong hầu hết các biểu đồ mới của mình.
SFun28

Câu trả lời:


264

Nó chỉ là những màu sắc cách đều nhau xung quanh bánh xe màu, bắt đầu từ 15:

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

Ví dụ:

n = 4
cols = gg_color_hue(n)

dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)

nhập mô tả hình ảnh ở đây


2
1 Tôi như tốt đẹp của bạn, giải pháp đơn giản, mặc dù tôi vẫn đang cố gắng tìm hiểu lý do tại sao bạn có length=n+1trong seq, trong khi tôi cólength=n
Andrie

18
Bởi vì 0 == 360
hadley

129

Đây là kết quả từ

library(scales)
show_col(hue_pal()(4))

Ggplot bốn màu

show_col(hue_pal()(3))

Ggplot ba màu


1
Thật kỳ lạ, màu sắc (ít nhất là trong hình thứ hai) không khớp với mã RGB của chúng. Tuy nhiên, nhìn vào biểu đồ mà tôi đã tạo cục bộ, các mã RGB này là chính xác.
Sparhawk

1
có lẽ nó là một thứ trình duyệt?
Climbs_lika_Spyder

1
Vâng, rất kỳ quặc. Trong Firefox, màu xanh lá cây là # 15ba3e, trong Chromium là # 00b83a và sau khi tải xuống hình ảnh và xem trong một chương trình hình ảnh chuyên dụng (Gwenview), nó là # 00b839. Chỉ Konqueror hiển thị chính xác là # 00ba38. Vì vậy, chỉ có một là đúng, và không có gì là nhất quán!
Sparhawk

1
Có cách nào để có được tên màu không, ví dụ 'red2', 'blue3 "? Mã màu, ví dụ # 00b83a, khó sử dụng bằng trực giác.
Sibo Jiang

2
Để dễ sao chép và dán các giá trị hex là: # f8766d - Đỏ # 00ba38 - Xanh # 83b0fc - Xanh lam
pluke

62

Những câu trả lời này đều rất hay, nhưng tôi muốn chia sẻ một điều khác mà tôi đã khám phá trên stackoverflow thực sự khá hữu ích, đây là liên kết trực tiếp

Về cơ bản, @DidzisElferts cho thấy cách bạn có thể nhận được tất cả các màu sắc, tọa độ, v.v. mà ggplot sử dụng để xây dựng cốt truyện bạn đã tạo. Rất đẹp!

p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
ggplot_build(p)$data
[[1]]
     fill  y count x ndensity ncount  density PANEL group ymin ymax xmin xmax
1 #F8766D  5     5 1        1      1 1.111111     1     1    0    5 0.55 1.45
2 #C49A00 47    47 2        1      1 1.111111     1     2    0   47 1.55 2.45
3 #53B400 41    41 3        1      1 1.111111     1     3    0   41 2.55 3.45
4 #00C094 11    11 4        1      1 1.111111     1     4    0   11 3.55 4.45
5 #00B6EB 33    33 5        1      1 1.111111     1     5    0   33 4.55 5.45
6 #A58AFF 35    35 6        1      1 1.111111     1     6    0   35 5.55 6.45
7 #FB61D7 62    62 7        1      1 1.111111     1     7    0   62 6.55 7.45

45

Từ trang 106 của cuốn sách ggplot2 của Hadley Wickham:

Bảng màu mặc định, scale_colour_hue chọn các màu cách đều nhau xung quanh bánh xe màu hcl.

Với một chút kỹ thuật đảo ngược, bạn có thể xây dựng chức năng này:

ggplotColours <- function(n = 6, h = c(0, 360) + 15){
  if ((diff(h) %% 360) < 1) h[2] <- h[2] - 360/n
  hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}

Chứng minh điều này trong barplot:

y <- 1:3
barplot(y, col = ggplotColours(n = 3))

nhập mô tả hình ảnh ở đây


2
Nó thậm chí còn đơn giản hơn thế này. Bạn có thể tránh dòng đại số đầu tiên kể từ khi, mặc dù nó không có trong trợ giúp, hcltái chế các giá trị> 360.
John Colby

13
Bạn thậm chí có thể sử dụng scales:::show_col(ggplotColours(n=3))để hiển thị màu sắc và giá trị
Stat-R

mặc dù tôi chưa tìm ra cách lấy tỷ lệ và show_col của nó để nhổ ra các giá trị (hex hoặc bất kỳ định dạng nào khác) mà nó vẽ ...
Stefano
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.