2012-02-16 27 views
14

tôi đã xác định một colorRampPalette:Colorbar từ tùy chỉnh colorRampPalette

my.colors = colorRampPalette(c("light green", "yellow", "orange", "red")) 

Làm thế nào tôi có thể vẽ một colorbar "huyền thoại" mục cho nó, tốt nhất là chỉ sử dụng các gói cơ sở? Tôi sau một hình chữ nhật đầy màu gradient đó.

gì tôi thực sự sau khi là một cách để tạo ra cùng một loại huyền thoại (thanh màu) được vẽ với một "raster" raster:

require(raster) 
plot(raster("myfile.tif"), legend=T) 

tôi cần để có thể đặt này trên đầu trang của cốt truyện khác.

+0

Thật buồn cười khi làm điều này khó khăn trong cơ sở R. Thông thường R có quá nhiều ma thuật nhưng dường như không phải cho các thanh màu. Tôi đoán các nhà thống kê chỉ nghĩ về màu đen và trắng? haha – wordsforthewise

Trả lời

19

tôi đã thực hiện một chức năng linh hoạt thoải mái một thời gian trước đây để làm điều này.

# Function to plot color bar 
color.bar <- function(lut, min, max=-min, nticks=11, ticks=seq(min, max, len=nticks), title='') { 
    scale = (length(lut)-1)/(max-min) 

    dev.new(width=1.75, height=5) 
    plot(c(0,10), c(min,max), type='n', bty='n', xaxt='n', xlab='', yaxt='n', ylab='', main=title) 
    axis(2, ticks, las=1) 
    for (i in 1:(length(lut)-1)) { 
    y = (i-1)/scale + min 
    rect(0,y,10,y+1/scale, col=lut[i], border=NA) 
    } 
} 

Sau đó, bạn có thể làm điều gì đó như:

> color.bar(colorRampPalette(c("light green", "yellow", "orange", "red"))(100), -1) 

enter image description here

Thêm ví dụ tại địa chỉ: http://www.colbyimaging.com/wiki/statistics/color-bars

+0

Trục của bạn đẹp hơn tôi. +1. – Spacedman

+3

Nếu bạn lấy ra dev.new bạn có thể sử dụng subplot từ gói: Hmisc để chồng lên vùng hiện tại. – Spacedman

9

Thực hiện một ma trận, sử dụng hình ảnh với một số thông số trục ...

my.colors = colorRampPalette(c("light green", "yellow", "orange", "red")) 
z=matrix(1:100,nrow=1) 
x=1 
y=seq(3,2345,len=100) # supposing 3 and 2345 are the range of your data 
image(x,y,z,col=my.colors(100),axes=FALSE,xlab="",ylab="") 
axis(2) 

image legend

4

colorbar.plot() từ gói các lĩnh vực là một giải pháp tiêu chuẩn. Nhiều người sẽ xem xét các giải pháp đặt chú giải bên ngoài vùng âm mưu chuẩn hoặc phạm vi x/y ban đầu. Hạn chế này của colorbar.plot() có thể dễ dàng khắc phục bằng cách:

  1. âm mưu hình ảnh của bạn(),
  2. mở rộng kích thước của thiết bị âm mưu với mệnh (pin = c (chiều rộng, chiều dài))
  3. gọi colorbar.plot() sử dụng ban đầu giá trị x và y

Bởi vì lĩnh vực thiết bị âm mưu hiện đang mở rộng, huyền thoại sẽ xuất hiện bên ngoài của ảnh gốc() cốt truyện. Thử nghiệm với các giá trị x và y đáp ứng được truyền thuyết ở bất kỳ đâu bạn muốn. Chú giải gradient có thể nằm ngang hoặc dọc bằng cách sử dụng các tùy chọn đối số chuẩn.

+0

Có nhưng bạn cũng cần đối số 'dải' và cho đến nay nó không đơn giản như nó phải là để tìm ra. Ví dụ mã hoạt động thường là một phần của câu trả lời hay. – wordsforthewise

0

Tôi biết đây là câu hỏi rất cũ, và câu trả lời đều tuyệt vời. Tôi chỉ muốn chỉ ra rằng bạn chỉ có thể làm trơn thanh màu từ levelplot.

Làm cho một số dữ liệu giả mạo và một gradient màu

mat = matrix(rnorm(400,1,1), ncol=20) 
grad = rev(rainbow(1000, start=rgb2hsv(col2rgb('green'))[1], 
     end=rgb2hsv(col2rgb('blue'))[1])) 

Hãy cốt truyện và chỉ định phá vỡ trong thanh màu

levelplot(mat, col.regions=grad, colorkey = list(at=seq(0,max(mat),length.out=400))) 

Chức năng này để levelplot có thể đã được thêm lâu sau khi tất cả các bạn folks đến với các giải pháp giải pháp ngọt ngào.

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