เลียนแบบจานสีเริ่มต้น ggplot2


192

ฉันสามารถใช้ฟังก์ชันใดเพื่อเลียนแบบจานสีเริ่มต้นของ ggplot2 สำหรับจำนวนสีที่ต้องการ ตัวอย่างเช่นอินพุต 3 จะสร้างเวกเตอร์อักขระของสี HEX ด้วยสีเหล่านี้: ป้อนคำอธิบายรูปภาพที่นี่


10
ดูแพคเกจตาชั่ง
hadley

2
ใช่! ฉันพิมพ์display.brewer.all()ที่โต๊ะของฉัน ฉันคิดว่าฉันชอบ Set1 ที่ดีที่สุดสำหรับปัจจัยต่างๆ
John Colby

ความคิดที่ดี! ฉันจะพิมพ์ออกมาเหมือนกัน เห็นด้วยกับ Set1 ฉันพบว่าตัวเองใช้มันในชาร์ตใหม่ส่วนใหญ่แล้ว
SFun28

คำตอบ:


267

มันเป็นเพียงการเว้นระยะห่างสีรอบวงล้อสีเริ่มต้นจาก 15:

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

ตัวอย่างเช่น:

n = 4
cols = gg_color_hue(n)

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

ป้อนคำอธิบายรูปภาพที่นี่


2
+1 ฉันชอบทางออกที่ดีเรียบง่ายของคุณแม้ว่าฉันจะยังคงพยายามที่จะเข้าใจว่าทำไมคุณถึงมีlength=n+1ในseqขณะที่ฉันมีlength=n
Andrie

18
เพราะ 0 == 360
hadley

131

นี่คือผลลัพธ์จาก

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

ggplot สี่สี

show_col(hue_pal()(3))

ggplot สามสี


1
อย่างผิดปกติสี (ในภาพที่สองเป็นอย่างน้อย) ไม่ตรงกับรหัส RGB ของพวกเขา อย่างไรก็ตามมองกราฟที่ผมทำในประเทศ, รหัส RGB เหล่านี้มีความถูกต้อง
Sparhawk

1
อาจเป็นสิ่งที่เบราว์เซอร์?
Climbs_lika_Spyder

1
ใช่แปลกมาก ใน Firefox สีเขียวคือ # 15ba3e ใน Chromium คือ # 00b83a และหลังจากดาวน์โหลดภาพและดูในโปรแกรมรูปภาพเฉพาะ (Gwenview) เป็น # 00b839 เฉพาะ Konqueror ที่แสดงอย่างถูกต้องเป็น # 00ba38 มีเพียงคนเดียวเท่านั้นที่ถูกต้องและไม่มีใครสอดคล้องกัน!
Sparhawk

1
มีวิธีการที่จะได้รับชื่อสีเช่น 'red2', 'blue3 "หรือไม่รหัสสีเช่น # 00b83a นั้นยากที่จะใช้อย่างสังหรณ์ใจ
Sibo Jiang

2
เพื่อความง่ายในการคัดลอกและวางค่าฐานสิบหกคือ: # f8766d - Red # 00ba38 - Green # 83b0fc - Blue
pluke

62

คำตอบเหล่านี้ทั้งหมดดีมาก แต่ฉันต้องการแบ่งปันสิ่งอื่นที่ฉันค้นพบใน stackoverflow ซึ่งมีประโยชน์มากจริงๆนี่คือลิงค์โดยตรง

โดยทั่วไป @DidzisElferts จะแสดงวิธีการรับสีพิกัดและอื่น ๆ ทั้งหมดที่ ggplot ใช้เพื่อสร้างพล็อตที่คุณสร้างขึ้น ดีมาก!

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

จากหน้า 106 ของหนังสือ ggplot2 โดย Hadley Wickham:

โทนสีเริ่มต้น scale_colour_hue เลือกเฉดสีที่เว้นระยะเท่ากันรอบวงล้อสี hcl

ด้วยวิศวกรรมย้อนกลับเล็กน้อยคุณสามารถสร้างฟังก์ชั่นนี้:

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)
}

แสดงให้เห็นถึงสิ่งนี้ใน barplot:

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

ป้อนคำอธิบายรูปภาพที่นี่


2
มันง่ายกว่านี้อีก คุณสามารถหลีกเลี่ยงบรรทัดแรกของพีชคณิตได้แม้ว่าจะไม่ได้อยู่ในความช่วยเหลือ แต่ก็สามารถhclรีไซเคิลค่า> 360 ได้
John Colby

13
คุณสามารถใช้scales:::show_col(ggplotColours(n=3))เพื่อแสดงสีและค่าได้ด้วย
Stat-R

แม้ว่าฉันจะไม่ได้คิดออกยังวิธีที่จะได้รับเครื่องชั่งและ show_col ของมันจะคายออก (hex หรือรูปแบบอื่น ๆ ) ค่ามันแปลง ...
Stefano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.