2

今天早上,我开始寻找一种解决方案,从我在这里拥有的成对值表中生成热图。我发现格子包提供levelplots的东西看起来就像我所追求的。当我设法将我的数据转换为正确的格式时,我使用了levelplot. 默认颜色主题不会产生我想要的,我在网上找到了灰度解决方案。但是,现在控制更多的情节有点超出我的范围。我不经常使用 R 并且对许多更深层次的数据结构还不是很熟悉。

我当前的命令是:

library("lattice")
matrix <- as.matrix(rev(read.table("inputfile",header=T,row.names=c(<list of ten names>))))
levelplot(matrix,col.regions = grey(100:0/100))

这是 dput 矩阵的输出:

结构(C(“937.5”,“652.5”,“1066.5”,“787.5”,“229.5”,“115.5”,
“787.5”、“763.5”、“415.5”、“不适用”、“1483.5”、“1360.5”、“1858.5”、
“1309.5”、“478.5”、“322.5”、“1375.5”、“1588.5”、“不适用”、“1759.5”、
“643.5”、“904.5”、“1189.5”、“712.5”、“256.5”、“154.5”、“829.5”、
“不适用”、“403.5”、“1231.5”、“808.5”、“1096.5”、“1195.5”、“913.5”、
“292.5”、“187.5”、“不适用”、“1147.5”、“478.5”、“1192.5”、“6712.5”、
“6373.5”、“6517.5”、“6058.5”、“4555.5”、“不适用”、“6394.5”、“7357.5”、
“6214.5”、“6835.5”、“3412.5”、“3991.5”、“3814.5”、“3793.5”、“不适用”、
“1327.5”、“3994.5”、“3808.5”、“3307.5”、“4618.5”、“1261.5”、“1261.5”、
“1162.5”、“不适用”、“310.5”、“220.5”、“1195.5”、“1639.5”、“574.5”、
“1732.5”、“871.5”、“847.5”、“不适用”、“610.5”、“262.5”、“172.5”、
“943.5”、“985.5”、“448.5”、“1525.5”、“940.5”、“不适用”、“1105.5”、
“829.5”、“292.5”、“160.5”、“961.5”、“1198.5”、“538.5”、“1495.5”、
“不适用”、“832.5”、“1009.5”、“880.5”、“280.5”、“196.5”、“952.5”、
“1357.5”、“550.5”、“1456.5”)、.Dim = c(10L、10L)、.Dimnames = 列表(
    c("NA_Pacific", "NA_Central", "NA_Atlantic", "格陵兰",
    “EU_NW”、“EU_WM”、“EU_BS.EM”、“Asia_SW”、“Asia_Central”、
    "Asia_East"), c("Asia_East", "Asia_Central", "Asia_SW", "EU_BS.EM",
    “EU_WM”、“EU_NW”、“格陵兰”、“NA_Atlantic”、“NA_Central”、
    “北美太平洋”)))
  1. 这几乎创造了我想要实现的目标。但是灰色很丑。我如何将其更改为蓝色?用灰色代替蓝色不起作用...

  2. 此外,它会将标签打印到我在输入表中指定的刻度上。这适用于 y 轴,但不适用于 x 轴。如何回收 y 轴刻度以将它们打印到 x 轴刻度(旋转 90 度)?

  3. 最后,沿 x 轴(顶部和底部)有一点点空白。虽然这不是真正的问题,但是消除它会很好。

我希望至少可以解决一些问题。提前致谢。

4

2 回答 2

1

我摆弄了很多,发现刻度标签和矩阵定义现在工作得很好,因为我设法将其包含row.names到矩阵中。但是,col.regions可以在 levelplot 函数中使用的方式令人大开眼界!我现在使用以下内容来获取颜色渐变levelplot

ramp <- colorRamp(c("white", "blue"))

这将创建白色和蓝色之间的渐变,但任何其他颜色都是可能的。同时确定坡道的方向。在这里,低值是白色,高值是蓝色。在levelplot我使用这个坡道时,col.regions如下所示:

col.regions=rgb(ramp(seq(0, 1, length = 1000)), max = 255)

长度应设置为任何大的值,以使其大于矩阵中不同值的数量。否则颜色会在热图中回收。设置max=255定义了渐变中两种颜色之间的整个范围。将其设置为较低的值将不起作用,因为它是我使用它的方式中可接受的最低值。将其设置得更高会将斜坡的“黑暗”向上移动,这有时也可能很好。

也许不是一个非常专业的解决方案,但它对我的情况非常有效,我可以很好地控制我的色带。谢谢指点!

于 2011-07-03T04:20:35.203 回答
0

目前该matrix对象是一个字符矩阵,我希望 levelplot 与数字矩阵一起使用会更好,所以我做了:

matrix2 <-apply(matrix, 2, as.numeric)

1)你应该意识到这grey是一个功能。其他颜色函数,如greyincludergbhsv. 也许……, col.regions=rgb(100) )假设您有 101 个不同的 x 值。编辑:那是错误的。rgb 函数注意三个向量参数:试试这个:

col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) )  
     # ugly result but shows how to use two color ranges

2) 轴刻度标签由 scales 参数的列表参数控制。类似于……的东西 , scales=list(x=list(labels=<label=vector>, at=<tick-positions>) )。这将不同于at用于设置 z-breaks 的设置。

3)我猜你已经通过尺寸或额外值的一些不匹配创建了沿 x 轴的空白。默认的 levelplot 不会创建空白。需要你的对象的那些细节。事实证明,当暗名是“字符”时存在空格,但当它们为 NULL 时不存在,所以试试这个:

rownames(matrix2) <- NULL
colnames(matrix2) <- NULL  # don't throw away matrix, we need its dimnames
levelplot(matrix2,col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) ), region=TRUE, 
    scales=list(x=list(rot=90, at=1:10, labels=rownames(matrix)), y=list( at=1:10, 
    labels=rownames(matrix)) ))
于 2011-07-02T13:31:11.927 回答