Gradient của n màu khác nhau, từ màu 1 và màu 2


108

Tôi thường làm việc với ggplot2điều đó làm cho gradient đẹp ( nhấp vào đây để xem ví dụ ). Tôi có nhu cầu làm việc trong cơ sở và tôi nghĩ scalescó thể được sử dụng ở đó để tạo ra các chuyển màu nhưng tôi hoàn toàn không hiểu về cách làm. Mục tiêu cơ bản là tạo ra một bảng màu gồm n màu trải dài từ màu x đến màu y. Tuy nhiên, giải pháp cần phải hoạt động trong cơ sở. Đây là điểm bắt đầu nhưng không có chỗ để nhập n.

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

Tôi biết rõ về:

brewer.pal(8, "Spectral") 

từ RColorBrewer. Tôi đang tìm kiếm thêm cách tiếp cận tương tự như cách ggplot2xử lý các gradient cho biết tôi có hai màu này và tôi muốn có 15 màu trên đường đi. Làm thế nào tôi có thể làm điều đó?


1
Tôi nghĩ bạn cần gói cân ; phiên bản ggplot2 mới nhất phụ thuộc vào điều này cho mã cơ bản. Tức là bạn không cần ggplot2 để sử dụng cân, bạn chỉ cần gói cân . Không có ý tưởng như thế nào các chức năng trong quy mô các công trình mặc dù :-)
Gavin Simpson

1
Lạc đề vì bạn đã yêu cầu basecụ thể, nhưng tôi thấy colourvalues( cả trên CRAN ) đặc biệt thuận tiện cho việc ánh xạ các giá trị sang một gradient. Nó cũng khá nhẹ (phụ thuộc vào Rcpp).
MichaelChirico

@MichaelChirico Không lạc đề, ý của tôi là tôi cần sử dụng cơ sở vẽ sơ đồ vì gói tôi đang sử dụng được viết bằng cơ sở (tôi nghĩ là wordcloud) chứ không phải dạng lưới. Có thể đăng như một câu trả lời?
Tyler Rinker

Câu trả lời:


179

colorRampPalette có thể là bạn của bạn ở đây:

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

Và chỉ để hiển thị nó hoạt động:

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

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


14
Lưu ý rằng nếu bạn đặc biệt say mê với một bảng màu có sẵn, chẳng hạn brewer.pal(8, "Spectral"), bạn có thể cung cấp vectơ màu kết quả colorRampPaletteđể tạo ra nhiều màu hơn dọc theo đoạn đường nối đó. Ví dụ: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums

Còn màu sắc với các đường chéo hoặc hình khối trong khối thì sao? @thelatemail
user3631848,

50

Chỉ cần mở rộng câu trả lời trước colorRampPalettecó thể xử lý nhiều hơn hai màu.

Vì vậy, để có giao diện kiểu "bản đồ nhiệt" được mở rộng hơn, bạn có thể ....

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

Hình ảnh kết quả:

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


Tôi cũng có thể chỉ định các đường chéo hoặc hình dạng trong màu sắc? @jsol
user3631848,

Tôi thích bảng màu này nhưng có quá nhiều màu xanh lá cây và rất ít màu vàng. Có cách nào để khắc phục điều này?
Herman Toothrot vào

1
Thêm cho bất kỳ ai khác không mong đợi thấy một tùy chọn như "springgreen" hoặc "royalblue". Tất cả các màu có sẵn để sử dụng có thể được trả về dưới dạng danh sách bằng cách chạy: Colors ().
jadki

20

Hãy thử những cách sau:

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)

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


chức năng này nên được thêm làm mặc định trong cơ sở R!
Simon C.

7

Câu trả lời trên rất hữu ích nhưng trong biểu đồ, rất khó để phân biệt giữa các độ dốc đậm hơn của màu đen. Một giải pháp thay thế mà tôi đã tìm thấy là sử dụng các màu xám như sau

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

Thông tin thêm về thang màu xám ở đây.

Thêm

Khi tôi sử dụng mã ở trên cho các màu khác nhau như xanh lam và đen, các chuyển màu không rõ ràng như vậy. heat.colors()có vẻ hữu ích hơn.

Tài liệu này có nhiều thông tin và tùy chọn chi tiết hơn. pdf


2
Tôi nghĩ rằng câu trả lời này tốt hơn cho màu đen và trắng nhưng không phải là tổng quát cho màu sắc. Cảm ơn bạn đã thêm thông tin có giá trị này. +1
Tyler Rinker

Đã thêm một liên kết cung cấp các tùy chọn tốt hơn cho độ chuyển màu và màu sắc hoạt động ở cả màu và B&W.
Anusha

@DavidDelMonte Tôi có thể đang có bản sao đã lưu của tệp nhưng không có liên kết cập nhật. Tuy nhiên, không chắc chắn nơi để tải nó lên.
Anusha

2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/... kiểm tra archive.org đầu tiên luôn.
thelatemail
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.