2016-06-03 16 views
10

Tôi đang cố gắng thiết lập thang đo tùy chỉnh trong R. Dữ liệu của tôi dao động trong các giá trị từ -5.4 đến +3.6 và tôi muốn căn giữa dữ liệu khoảng 0 (màu trắng). Tôi muốn có một tỷ lệ cho dữ liệu như vậy mà tôi có cùng số lượng các cấp bậc trên và dưới 0 (hiện tại tôi đang quay 7). Vấn đề mà tôi đang gặp phải là tôi không thể có được quy mô chính xác và tôi không chắc chắn vấn đề của mình ở đâu.Thiết lập thang màu tùy chỉnh trong R

Mã của tôi vào lúc này (dữ liệu nguồn là trong liên kết Pastebin ở phía dưới):

png('127-2_4_compare_other.png',width = 1200, height = 800, units = "px") 
    colfunc <- colorRampPalette(c("blue", "white", "red")) 
    f <- function(m) t(m)[,nrow(m):1] 
    colorBarz=matrix(seq(-5.5,4,len=15),nrow=1) 
    colorBarx=1 
    source("127-2_4.CompareMatrix.txt") 
    colorBary=seq(-5.4,3.6,len=15) 
    cus_breaks=c(-5.400, -4.725, -4.050, -3.375, -2.700, -2.025, -1.350, -0.675, 0.45, 0.90, 1.35, 1.80, 2.25, 2.70, 3.15, 3.60) 
    layout(matrix(c(1,2), 1, 2, byrow = TRUE), widths=c(9,1)) 
    image(f(Compare2and4),axes=FALSE,ylab="Amino acids",xlab="Position",main="Sample 2 vs. 4",col=colfunc(15),breaks=cus_breaks) 
    axis(1, seq(from = 0, to = 1, by = 0.03703), labels=c(1:11,1:17)) 
    axis(2, seq(from = 0, to = 1, by = 0.0526),labels=rev(c("A","R","N","D","C","E","Q","G","H","I","L","K","M","F","P","S","T","W","Y","V")),las=2) 
    image(colorBarx,colorBary,colorBarz,col=colfunc(15),axes=FALSE,xlab="",ylab="log(Sample4/Sample2)",breaks=cus_breaks) 
    axis(2,las=2) 
    dev.off() 

Tôi đang tìm kiếm cho bảy thùng đều chia trên 0-3,6 và bảy thùng đều chia dưới 0 đến -5,4 và tôi muốn 0 đánh vào giữa thùng màu trắng. Ngoài ra nếu ai cũng có thể xem xét mã bản đồ nhiệt để đảm bảo rằng không có lỗi rõ ràng, tôi sẽ đánh giá cao nó. Pastebin of the source data

Heatmap correct scale incorrect

+0

không chắc chắn nó sẽ khắc phục vấn đề của bạn, nhưng trong trường hợp này Tôi có xu hướng bin dữ liệu (ví dụ như với 'cắt') chứ không phải là bảng màu. –

+0

Nếu tôi hiểu cắt chính xác, điều đó sẽ giúp tôi thiết lập các thùng có kích thước bằng nhau trên 0 và dưới 0. Tôi nghĩ rằng tôi đã làm tương tự ở đây với các cus_breaks mặc dù tôi có thể không nhìn vào nó một cách chính xác? –

+0

có thể, điều này có thể giúp http://stackoverflow.com/questions/29301608/low-med-high-colors-for-deciles-in-ggplot – novice

Trả lời

1

Một vấn đề với quy mô màu đề xuất của bạn là khoảng cách nhận thức giữa mỗi điểm trên quy mô không bằng. Khoảng cách màu tương tự đề cập đến phạm vi giá trị dữ liệu lớn hơn ở đầu dương, so với đầu âm. Tôi khuyên bạn không nên sáng tạo lại bánh xe và tận dụng khả năng tuyệt vời của ggplot.

Theo mặc định, quy mô màu phân kỳ sẽ có màu trắng như các trung điểm theo giá trị 0.

Ví dụ:

Compare2and4_t <- t(Compare2and4)[,nrow(Compare2and4):1] 
am_ac <- c("A","R","N","D","C","E","Q","G","H","I","L","K","M","F","P","S","T","W","Y","V") 
pdat <- data.frame(x = 1:nrow(Compare2and4_t), 
        y = factor(rep(am_ac, each = nrow(Compare2and4_t)), levels = rev(am_ac)), 
        val = c(Compare2and4_t)) 

library(ggplot2) 
library(scales) 

ggplot(pdat, aes(x, y, fill = val)) + 
    geom_tile() + 
    scale_fill_gradient2(low = 'darkblue', high = 'darkred', 
         limits = c(-5.4, 3.6), oob = squish) + 
    coord_equal(expand = FALSE) + 
    scale_x_continuous(breaks = unique(pdat$x)) + 
    theme_classic() + 
    labs(x = 'Position', y = 'Amino acids') 

enter image description here

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