我在做格子levelplot
来自 x
和 y
范围从 [0,1] 的因素:
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
...
这是我用来根据这些数据制作图形的 R 脚本:
#!/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();
这工作正常。我得到下图:
但是,不是将单元格标记为
NA
, 我想把它们留为 1.00
值,但使用 0.10
为 10(0.79
的级别)和 79(colors
的级别)之间的所有单元格着色.任何大于 79 的颜色都会与应用于具有大约 79 的单元格的颜色相同。级别为 79。或者,优选地,所述单元格将被着色为黑色,其中根本没有文本。有没有办法用
levelplot
来做到这一点?和格子?最终编辑
这并没有给出太多的颜色渐变,但我已经足够接近了,我会奖励赏金,也许会调查
ggplot2
作为备选。感谢您为此所做的所有辛勤工作。这是我的脚本的最终编辑:
#! /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()
这是
levelplot
这个脚本使得:如果我增加
n
以上 15
,单元格颜色再次中断,返回对角线的鲜红色,而不是黑色(如图所示)。
最佳答案
这是修订版#3
又来了)。 :)
这很奇怪,如果我将 n 设置为 15 以下的任何值,事情似乎有效?
df <- read.table("http://dl.dropbox.com/u/31495717/stackoverflow.overlaps.list.txt",
sep = "\t", header = FALSE)
names(df) <- c("x", "y", "level")
df$level <- round(df$level*100, 0)
n <- 10
col.seq <- seq(10, 80, length.out = n)
brks <- c(0, seq(10, 80, length.out = n), 100)
cuts <- cut(df$level, breaks = brks)
colors <- colorRampPalette(c("red", "white"))(length(levels(cuts))-1)
colors <- c(colors, "black")
cls <- rep(colors, times = table(cuts))
print(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 = colors, at = brks)
))
关于r - 如何为不同级别指定不同的颜色范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585767/