Tôi đang làm cho một mạng levelplot
từ x
và y
yếu tố dao động từ [0,1]:Làm cách nào để chỉ định các dải màu khác nhau cho các cấp khác nhau?
x y level
1 m3134 m3134 1.0000000
2 m3134 m416B 0.4189057
3 m416B m3134 0.2696508
4 m3134 mA20 0.3322170
5 mA20 m3134 0.2454191
6 m3134 mB 0.3176792
...
Đây là kịch bản R mà tôi sử dụng để làm cho con số từ dữ liệu này:
#!/foo/bar/bin/Rscript --vanilla
args <- commandArgs(TRUE)
mtxFn <- args[1]
pdfFn <- args[2]
mtx <- read.table(mtxFn, col.names=c("x", "y", "level"))
mtx$level[(mtx$level == 1)] <- NA
library(lattice)
trellis.device(dev=pdf, file=pdfFn)
colors <- colorRampPalette(c('red', 'white'))(256)
fig <- levelplot(level~x*y,
data=mtx,
col.regions=colors,
xlab="",
ylab="",
aspect="iso",
scales=list(
x=list(rot=90)
),
panel=function(...) {
arg <- list(...)
panel.levelplot(...)
panel.text(mtx$x, mtx$y, round(mtx$level*100,0), cex=0.5)
}
)
print(fig)
graphics.off();
Điều này hoạt động tốt. Tôi nhận được hình sau:
Tuy nhiên, thay vì có các tế bào nhãn NA
, tôi muốn để lại chúng như 1.00
giá trị, nhưng màu sắc tất cả các ô từ 10 (một mức độ 0.10
) và 79 (một mức 0.79
) với colors
. Bất cứ điều gì lớn hơn 79 được tô màu với cùng một màu sắc như những gì được áp dụng cho một tế bào với khoảng. mức 79. Hoặc, tốt hơn, các tế bào được nói sẽ có màu đen, không có văn bản bên trong chúng.
Có cách nào để thực hiện điều này với levelplot
và mạng không?
CUỐI CÙNG EDIT
này không đưa ra nhiều của một gradient trong màu sắc, nhưng tôi đủ gần mà tôi sẽ trao giải bounty, và có lẽ nhìn vào ggplot2
như một sự thay thế. Cảm ơn tất cả các công việc khó khăn của bạn về điều này.
Đây là chỉnh sửa cuối cùng của kịch bản của tôi:
#! /foo/bar/bin/Rscript --vanilla
args <- commandArgs(TRUE)
dfFn <- args[1]
pdfFn <- args[2]
df <- read.table(dfFn,
col.names=c("x", "y", "level"),
stringsAsFactors=TRUE,
colClasses=c("factor", "factor", "numeric"))
df$level <- round(df$level*100, 0)
# reorder cell type row-factors (in reverse of given order)
df$y <- factor(df$y, levels=unique(df$y[length(df$y):1]))
lowestValue <- min(df$level)
secondHighestValue <- unique(sort(df$level, decreasing=TRUE))[2]
n <- 10
col.seq <- seq(lowestValue, secondHighestValue, length.out=n)
brks <- c(0, col.seq, Inf)
cuts <- cut(df$level, breaks = brks)
colors <- colorRampPalette(c("white", "red"))(length(levels(cuts))-1)
colors <- c(colors, "black")
cls <- rep(colors, times = table(cuts))
library(lattice)
trellis.device(dev=pdf, file=pdfFn)
fig <- levelplot(cuts~x*y,
data = df,
cuts = n,
col.regions=cls,
xlab="",
ylab="",
aspect="iso",
scales=list(
x=list(rot=90)
),
panel=function(...) {
arg <- list(...)
panel.levelplot(...)
panel.text(df$x, df$y, df$level, cex=0.5)
},
colorkey=list(col=colorRampPalette(c("white", "red"))(length(col.seq)), at=col.seq)
)
print(fig)
graphics.off()
Đây là levelplot
rằng kịch bản này làm cho:
Nếu tôi tăng n
trên 15
, vỡ màu tế bào một lần một lần nữa, trở lại một đường chéo của màu đỏ tươi, thay vì màu đen (như được hiển thị).
tôi sẽ xây dựng thùng sử dụng 'cắt (x, phá vỡ = c (0, 1, seq (10, 79, 1), 80 tuổi, Inf))' và gán một màu sắc phù hợp với mỗi bằng cách sử dụng 'colorRampPalette' của bạn. Thông qua 'seq', bạn luôn có thể tạo ra một số mức mong muốn. Đối với NA-s của bạn, hãy để lại tuyên bố thứ 5 của bạn. –
Vui lòng xem câu trả lời đã sửa đổi của tôi. –
Bạn có thể đăng mẫu dữ liệu trực tuyến (dropbox hoặc somesuch) không? –