การไล่ระดับของ n สีตั้งแต่สี 1 และสี 2


108

ฉันมักจะทำงานกับการggplot2ไล่ระดับสีที่ดี ( คลิกที่นี่เพื่อดูตัวอย่าง ) ฉันมีความต้องการที่จะทำงานในฐานและฉันคิดว่าscalesสามารถใช้ที่นั่นเพื่อสร้างการไล่ระดับสีได้เช่นกัน แต่ฉันไม่ได้ตั้งใจอย่างมาก เป้าหมายพื้นฐานคือสร้างจานสี n สีที่มีตั้งแต่สี x ไปจนถึงสี y การแก้ปัญหาจำเป็นต้องทำงานในฐานแม้ว่า นี่เป็นจุดเริ่มต้น แต่ไม่มีที่ให้ใส่ n

 scale_colour_gradientn(colours=c("red", "blue"))

ฉันตระหนักดีถึง:

brewer.pal(8, "Spectral") 

จากRColorBrewer. ฉันกำลังมองหาวิธีการเพิ่มเติมที่คล้ายกับวิธีggplot2จัดการกับการไล่ระดับสีที่บอกว่าฉันมีสองสีนี้และฉันต้องการ 15 สีไปพร้อมกัน ฉันจะทำเช่นนั้นได้อย่างไร?


1
ฉันคิดว่าคุณต้องมีแพ็คเกจตาชั่ง ggplot2เวอร์ชันล่าสุดขึ้นอยู่กับสิ่งนี้สำหรับรหัสพื้นฐาน กล่าวคือคุณไม่จำเป็นต้องใช้ggplot2เพื่อใช้เครื่องชั่งคุณเพียงแค่ต้องใช้แพ็คเกจเครื่องชั่ง ไม่รู้ว่าฟังก์ชันในสเกลทำงานอย่างไร :-)
Gavin Simpson

1
นอกประเด็นเนื่องจากคุณร้องขอbaseโดยเฉพาะ แต่ฉันพบว่าcolourvalues( รวมถึง CRAN ) สะดวกเป็นพิเศษสำหรับการแมปค่ากับการไล่ระดับสี นอกจากนี้ยังมีน้ำหนักเบาอีกด้วย (ขึ้นอยู่กับRcpp)
MichaelChirico

@MichaelChirico ไม่ได้อยู่นอกหัวข้อสิ่งที่ฉันหมายถึงคือฉันต้องใช้การพล็อตฐานเนื่องจากแพ็คเกจที่ฉันใช้นั้นเขียนด้วยฐาน (ฉันคิดว่า wordcloud) แทนที่จะเป็นตาราง อาจจะโพสต์เป็นคำตอบ?
Tyler Rinker

คำตอบ:


181

colorRampPalette อาจเป็นเพื่อนของคุณที่นี่:

colfunc <- colorRampPalette(c("black", "white"))
colfunc(10)
# [1] "#000000" "#1C1C1C" "#383838" "#555555" "#717171" "#8D8D8D" "#AAAAAA"
# [8] "#C6C6C6" "#E2E2E2" "#FFFFFF"

และเพื่อแสดงให้เห็นว่ามันใช้งานได้:

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)

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


14
โปรดทราบว่าหากคุณหลงใหลจานสีที่มีอยู่แล้วเป็นพิเศษเช่นbrewer.pal(8, "Spectral")คุณสามารถให้เวกเตอร์สีที่เป็นผลลัพธ์colorRampPaletteเพื่อสร้างสีเพิ่มเติมตามทางลาดนั้น ตัวอย่างเช่น: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums

แล้วสีที่มีเส้นทแยงมุมหรือรูปร่างในบล็อกล่ะ? @thelatemail
user3631848

50

เพียงเพื่อขยายคำตอบก่อนหน้านี้colorRampPaletteสามารถรองรับได้มากกว่าสองสี

ดังนั้นสำหรับประเภท "แผนที่ความร้อน" ที่ขยายมากขึ้นคุณสามารถ ....

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)

ภาพที่ได้:

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


ฉันสามารถระบุเส้นทแยงมุมหรือรูปร่างเป็นสีได้หรือไม่? @jsol
user3631848

ฉันชอบจานสีนี้ แต่มีสีเขียวมากเกินไปและมีสีเหลืองน้อยมาก มีวิธีแก้ไขไหม
Herman Toothrot

1
การเพิ่มสำหรับใครก็ตามที่ไม่คาดคิดว่าจะได้เห็นตัวเลือกเช่น "springgreen" หรือ "royalblue" สีทั้งหมดที่พร้อมใช้งานสามารถส่งคืนเป็นรายการได้โดยการเรียกใช้: colors ()
jadki

20

ลองทำดังต่อไปนี้:

color.gradient <- function(x, colors=c("red","yellow","green"), colsteps=100) {
  return( colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )
}
x <- c((1:100)^2, (100:1)^2)
plot(x,col=color.gradient(x), pch=19,cex=2)

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


ควรเพิ่มฟังก์ชันนี้เป็นค่าเริ่มต้นในฐาน R!
Simon C.

7

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

palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))

ข้อมูลเพิ่มเติมเกี่ยวกับระดับสีเทาที่นี่

เพิ่มแล้ว

เมื่อฉันใช้รหัสด้านบนสำหรับสีที่ต่างกันเช่นสีน้ำเงินและสีดำการไล่ระดับสีไม่ชัดเจน heat.colors()ดูเหมือนมีประโยชน์มากขึ้น

เอกสารนี้มีข้อมูลรายละเอียดและตัวเลือกเพิ่มเติม ไฟล์ PDF


2
ฉันคิดว่าคำตอบนี้ดีกว่าสำหรับสีดำเป็นสีขาว แต่ใช้กับสีทั่วไปไม่ได้ ขอขอบคุณสำหรับการเพิ่มข้อมูลที่มีค่านี้ +1
Tyler Rinker

เพิ่มลิงค์ที่ให้ตัวเลือกที่ดีกว่าสำหรับการไล่ระดับสีและเฉดสีซึ่งใช้ได้ทั้งสีและขาวดำ
อนุชา

@DavidDelMonte ฉันอาจจะมีสำเนาของไฟล์ที่บันทึกไว้ แต่ไม่มีลิงก์ที่อัปเดต ไม่แน่ใจว่าจะอัปโหลดได้ที่ไหน
อนุชา

2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/…ตรวจสอบ archive.org ก่อนเสมอ
thelatemail
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.